質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.46%
systemd

systemdは、Linuxの起動処理及びシステム管理を行う技術です。他にも多くのサービス管理機能を備えており、ユーザープロセスを並列に起動しシステムの起動処理に要する時間を短縮できるなどの特徴があります。

Raspberry Pi

Raspberry Piは、ラズベリーパイ財団が開発した、名刺サイズのLinuxコンピュータです。 学校で基本的なコンピュータ科学の教育を促進することを意図しています。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

2回答

2561閲覧

ラズベリーパイでsystemdでの実行時 "のみ" numpyのインポートが出来ない

shinchoroX

総合スコア17

systemd

systemdは、Linuxの起動処理及びシステム管理を行う技術です。他にも多くのサービス管理機能を備えており、ユーザープロセスを並列に起動しシステムの起動処理に要する時間を短縮できるなどの特徴があります。

Raspberry Pi

Raspberry Piは、ラズベリーパイ財団が開発した、名刺サイズのLinuxコンピュータです。 学校で基本的なコンピュータ科学の教育を促進することを意図しています。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2021/09/22 07:43

編集2021/09/22 08:00

前提・実現したいこと

前回の質問
https://teratail.com/questions/360717
で、systemdを使用した時に"のみ"発生する
Opencvのインポートエラーが発生する件はアドバイスを頂き解決しました。
ありがとうございました。

次は
systemdを使用した時に"のみ"numpyのインポートエラーが発生します。
numpyは最新版をインストールしています。
pip install numpy --upgrade
で確認済み。

発生している問題・エラーメッセージ

ラズベリーパイ起動後にターミナルでサービスファイルのステータスをみると

● leasematCC.service - Leasemat Customer Counter System auto boot Loaded: loaded (/etc/systemd/system/leasematCC.service; static; vendor preset: enabled) Active: failed (Result: exit-code) since Wed 2021-09-22 16:18:23 JST; 27s ago Process: 1032 ExecStart=/usr/bin/python3 /home/pi/Leasemat/CC.py (code=exited, status=1/FAILURE) Main PID: 1032 (code=exited, status=1/FAILURE) 9月 22 16:18:23 raspberrypi python3[1032]: Traceback (most recent call last): 9月 22 16:18:23 raspberrypi python3[1032]: File "/home/pi/Leasemat/CC.py", line 45, in <module> 9月 22 16:18:23 raspberrypi python3[1032]: import Camera_Count as CAMC 9月 22 16:18:23 raspberrypi python3[1032]: File "/home/pi/Leasemat/Camera_Count.py", line 13, in <module> 9月 22 16:18:23 raspberrypi python3[1032]: import cv2 as cv 9月 22 16:18:23 raspberrypi python3[1032]: File "/home/pi/.local/lib/python3.7/site-packages/cv2/__init__.py", line 5, in <module> 9月 22 16:18:23 raspberrypi python3[1032]: from .cv2 import * 9月 22 16:18:23 raspberrypi python3[1032]: ImportError: numpy.core.multiarray failed to import 9月 22 16:18:23 raspberrypi systemd[1]: leasematCC.service: Main process exited, code=exited, status=1/FAILURE 9月 22 16:18:23 raspberrypi systemd[1]: leasematCC.service: Failed with result 'exit-code'. ~

となりましたので、numpyをアップグレードしましたが直りません。

ターミナルで
pip show numpy
を打つと

Location: /home/pi/.local/lib/python2.7/site-packages

となります。
9か月前の質問のアドバイスで
「python2と3の互換性はほぼ無い」
と教えて頂いたので、python2.7で実行されているのがおかしいのではないか?
と考えているのですが、サービスファイルにてpython3を指定しています。

サービスファイルの内容
[Unit] Description= Leasemat Customer Counter System auto boot [Service] ExecStart=/usr/bin/python3 /home/pi/Leasemat/CC.py

試したこと

先の質問のアドバイスと同じ様に
sys.path.append("/home/pi/.local/lib/python2.7/site-packages")
をコードに追加してみましたが、うまくいきません。

当然ですね。アドバイスでの意図を勘違いしていました。

「ワーキングパスを意識する」等の言葉のみを知っているので、入門書から勉強しているのですが
追いついていません。
アドバイスを頂けると幸いです。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

jbpb0

2021/09/22 20:43 編集

> numpyは最新版をインストールしています。 pip install numpy --upgrade で確認済み。 ラズパイのOS同梱のPythonの場合、aptがモジュールを管理してるものがあります dpkg -l | grep python3 で表示されるものがそうで、実行したら分かりますけど、結構な数があり、その中に python3-numpy も含まれてます それらは本来aptが管理してるものなので、それをそのままにしておいて、同じモジュールにさらにpipで何かすると、aptの管理情報と矛盾が生じたり、aptとpipで同じ名前のモジュールの別バージョンが別の場所にインストールされて二重インストール状態になったりして、ややこしい状態になります aptが管理してるnumpyのバージョンは、下記を実行したら分かります dpkg -l python3-numpy numpyに関してaptが管理してるファイルは、下記を実行したら分かります dpkg -L python3-numpy pipが入れたnumpyのバージョンや、入れた場所は、下記を実行したら分かります pip3 show numpy 上記の結果表示を比較して、現状どうなってるのかを把握してください
shinchoroX

2021/09/23 00:27

ありがとうございます。 本日は所用で、触われないので明日に試します。 コマンドのご教授までありがとうございます。 恥ずかしながら「aptはDebian系固有のコマンド」すらも知らない段階でした。 コマンドの意味も理解しながら進めてみます。 また結果を報告致します。 お時間がある時に覗いて頂けると幸いです。
jbpb0

2021/09/23 03:41 編集

想像ですが、(OSに付いてきた)元々あった古いバージョンのnumpyは /usr/lib/python3/dist-packages にあり、pip3で入れた新しいバージョンのnumpyは(OpenCVと同様に) /home/pi/.local/lib/python3.7/site-packages にあるのかも、と思います もし上記の通りなら、「sys.path」の優先順位から、うまく行く場合とダメな場合でインポートされるnumpyのバージョンが変わり、 > systemdを使用した時に"のみ"numpyのインポートエラーが発生します。 の場合は、古いバージョンのnumpyがインポートされます
shinchoroX

2021/09/24 01:11 編集

ありがとうございます。 全くもって仰る通りの場所でした。 これはどちらかをアンインストールすればいいのでしょうか? 厚かましいお願いですが、アドバイスを頂けると幸いです。 ワーキングディレクトリ?ワーキングパス?をどこをメインにするのか? などなのでしょうか?勉強も並行して進めます。 (同時進行で「イラストでそこそこわかるLinux」と言う初心者向けの本から読んで調べております ただ、centOSを主とした解説本でした。が概略を掴んでから、より詳細な本を購入し勉強します。) 【コマンドとその実行結果】 ①dpkg -l python3-numpy でのバージョン確認  :1:1.16.2-1 ②dpkg -L python3-numpy での表示結果(抜粋)  /usr/lib/python3/dist-packages ③pip3 show numpy での実行結果  Location: /home/pi/.local/lib/python3.7/site-packages
jbpb0

2021/09/24 03:02 編集

「sys.path.append()」だと「sys.path」の最後に追加されて優先順位が一番下になりますが、「sys.path.insert()」ならば任意の位置に挿入できます https://teratail.com/questions/249035 /home/pi/.local/lib/python3.7/site-packages の「sys.path」内での順番が、 /usr/lib/python3/dist-packages よりも前(上)になるようにしてみてください https://note.nkmk.me/python-list-append-extend-insert/ の「指定位置に要素を追加(挿入): insert()」も見てください
shinchoroX

2021/09/24 04:10 編集

ありがとうございます。 来客対応がありまして、先ほどアドバイスを拝見いたしました。 とても勉強になります。 よく読んで試してみます。 (Linuxコマンドなのか、pipなどのPythonのパッケージ管理ツールなのか、そしてPython中身のリストを触っていくのか。どこで何を操作するのかを考えながら読んでいきます。)
shinchoroX

2021/09/24 05:31 編集

ありがとうございました。 systemdでも起動しました。 sys.path.insert(-1,"/home/pi/.local/lib/python3.7/site-packages") の記述に変更しました。 「どこのモジュールを使うかをしっかり意識する」 を念頭にプログラムを作成します。 案内頂きましたサイトにも https://note.nkmk.me/python-import-module-search-path/ sys.pathの説明がありました。 ここも並行して勉強します。 回答への記載をお願いしてもよろしいでしょうか。 (このままでは、ベストアンサーに選べないため。後学の為にもBAを残したいと考えております。 お手数をおかけしますが宜しくお願い致します。 明日にコロナワクチンの2回目を打つので、BAを選択することが遅れるかもしれません。勝手を言い申し訳ございません。)
guest

回答2

0

ベストアンサー

aptが管理してる(OSに同梱の)numpyと、pip3で入れた別のバージョンのnumpyが別の場所に入っていて、「sys.path」での優先順位との関係で、うまく行く場合とダメな場合で、インポートされるnumpyのバージョンが異なっているのだと思います

aptが管理してるnumpyのバージョンは、下記を実行したら分かります

sh

1dpkg -l python3-numpy

numpyに関してaptが管理してるファイルは、下記を実行したら分かります

sh

1dpkg -L python3-numpy

pipが入れたnumpyのバージョンや、入れた場所は、下記を実行したら分かります

sh

1pip3 show numpy

上記の結果表示を比較して、現状どうなってるのかを把握してください

 
「sys.path」への追加ですが、「sys.path.append()」だと「sys.path」の最後に追加されて優先順位が一番下になりますが、「sys.path.insert()」ならば任意の位置に挿入できます

参考
[Python] sys.path.insertとは?
Pythonでリスト(配列)に要素を追加するappend, extend, insert

投稿2021/09/24 05:36

jbpb0

総合スコア7653

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

shinchoroX

2021/09/24 05:39

私の乱文を整理し、具体的かつ参考URLまで張り付けて頂き、本当にありがとうございます。 精進致します。
guest

0

Python3系はpipではなくpip3なのではないですか。

shell

1pip3 install numpy

をやってみてください。

投稿2021/09/22 09:40

ppaul

総合スコア24666

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

shinchoroX

2021/09/22 10:13

ありがとうございます。 帰宅してしまいましたので、後ほど試してみます。 (リモートで職場のパソコンが操作できるので)
shinchoroX

2021/09/22 11:38

pip3で行いましたが、同じでした。 (と言うよりも、pip3でnumpyが既に入っておりました。)
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.46%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問