PINTO0309 / MobileNet-SSD-RealSense

[High Performance / MAX 30 FPS] RaspberryPi3(RaspberryPi/Raspbian Stretch) or Ubuntu + Multi Neural Compute Stick(NCS/NCS2) + RealSense D435(or USB Camera or PiCamera) + MobileNet-SSD(MobileNetSSD) + Background Multi-transparent(Simple multi-class segmentation) + FaceDetection + MultiGraph + MultiProcessing + MultiClustering
https://qiita.com/PINTO
MIT License
366 stars 127 forks source link

Systemdでの起動失敗 Automatic startup failure on Systemd #9

Closed Teable closed 6 years ago

Teable commented 6 years ago

pyrealsense2を用いたプログラムをsystemdを用いて起動を試みたのですが(python3)、以下のエラーにより失敗します。

ImportError: No module named 'pyrealsense2'

systemdを用いずに起動した際は、"ImportError"は出ず、プログラムは正常に動作します。 また、パッケージのバージョンは全てreadmeに従っています。

宜しくお願い致します。

English I attempted to run a program using pyrealsense2 with systemd (python 3), but it fails with the following error.

ImportError: No module named 'pyrealsense2'

When run the program without using systemd, it works normally. Also, all package versions compliant with readme.

Thank you.

PINTO0309 commented 6 years ago

@Teable ◆Japanese pyrealsense2 に限った事象ではないように見えますが、下記は試されましたか? と、systemdを使用したことない私が偉そうに語ります。 https://bacchi.me/linux/systemd-tips/

◆English It seems that it is not limited to RealSense, but has the following been tried? https://bacchi.me/linux/systemd-tips/

PINTO0309 commented 6 years ago

@Teable 注目していただきたいのは下記の手順の箇所です。

13.Update PYTHON_PATH

$ nano ~/.bashrc
export PYTHONPATH=$PYTHONPATH:/usr/local/lib

.bashrc が実行される前に systemd が実行されている、と予想しました。 根拠は、エラーメッセージが、 "pyrealsense2を見つけられない" という表示だったためです。

先人の知恵によると。。。 1. /etc/sysconfig/USER_NAME に読み込ませたい環境変数を書く 2. systemd設定ファイルの[service]ディレクティブにEnvironmentFileを定義する 3. サービスの再起動

で解決するようです。

ちなみに、私の環境で pyrealsense2 の実体がどこにあるか調べてみました。

$ sudo find / -name pyrealsense2*

/usr/local/lib/pyrealsense2.cpython-35m-x86_64-linux-gnu.so.2.15.0 ←ココ
/usr/local/lib/pyrealsense2.cpython-35m-x86_64-linux-gnu.so.2 ←ココ
/usr/local/lib/pyrealsense2.cpython-35m-x86_64-linux-gnu.so ←ココ
/home/xxxxx/librealsense/wrappers/python/pyrealsense2
/home/xxxxx/librealsense/build/wrappers/python/pyrealsense2.cpython-35m-x86_64-linux-gnu.so.2.15.0
/home/xxxxx/librealsense/build/wrappers/python/CMakeFiles/pyrealsense2.dir
/home/xxxxx/librealsense/build/wrappers/python/pyrealsense2.cpython-35m-x86_64-linux-gnu.so.2
/home/xxxxx/librealsense/build/wrappers/python/pyrealsense2.cpython-35m-x86_64-linux-gnu.so

どうでしょうか。 日本人の方だとは気づいていますが、他の海外のエンジニアのため、英語でも記載しておきます。

◆English Please pay attention to the following procedure. 13.Update PYTHON_PATH

$ nano ~/.bashrc
export PYTHONPATH=$PYTHONPATH:/usr/local/lib

I expected that systemd is running before .bashrc is executed. The rationale is that the error message was an indication "Can not find pyrealsense2".

Method of solution

  1. Write the environment variable you want to load into /etc/sysconfig/
  2. Define EnvironmentFile for [service] directive in systemd configuration file
  3. Restart service

By the way, I tried to find out where the entity of pyrealsense2 is in my environment.

$ sudo find / -name pyrealsense2*

/usr/local/lib/pyrealsense2.cpython-35m-x86_64-linux-gnu.so.2.15.0 ←Here
/usr/local/lib/pyrealsense2.cpython-35m-x86_64-linux-gnu.so.2 ←Here
/usr/local/lib/pyrealsense2.cpython-35m-x86_64-linux-gnu.so ←Here
/home/xxxxx/librealsense/wrappers/python/pyrealsense2
/home/xxxxx/librealsense/build/wrappers/python/pyrealsense2.cpython-35m-x86_64-linux-gnu.so.2.15.0
/home/xxxxx/librealsense/build/wrappers/python/CMakeFiles/pyrealsense2.dir
/home/xxxxx/librealsense/build/wrappers/python/pyrealsense2.cpython-35m-x86_64-linux-gnu.so.2
/home/xxxxx/librealsense/build/wrappers/python/pyrealsense2.cpython-35m-x86_64-linux-gnu.so
Teable commented 6 years ago

ご丁寧にありがとうございます。 なるほど、分かりました。 確認してみます。

Teable commented 6 years ago

正常に動作しました。ありがとうございます!

修正点: sudo nano /etc/sysconfig/USER_NAME

以下の行を追加: PYTHONPATH=$PYTHONPATH:/usr/local/lib (PATHはpyrealsense2がある場所を指定。Readmeに沿って環境構築した場合は、これで大丈夫です。)

後は上記の方法に従い、解決しました。

◆English Service worked normally. Thank you!

modified method: sudo nano /etc/sysconfig/USER_NAME

Add the following line: PYTHONPATH=$PYTHONPATH:/usr/local/lib (In PATH, Specify address where pyrealsense 2 exists. If you built environment according to Readme, it is "/usr/local/lib" .)

Afterwards, if you follow the above method, This error is solved.

Teable commented 6 years ago

解決致しましたので、issueを閉じさせて頂きます。