事象
raspberry Pi や linuxを使っているときにシェルスクリプト(.sh)でpythonを実行すると
importエラー(ModuleNotFoundError)が出る
原因
shで実行すると個別ユーザーでpip installしたモジュールフォルダを見に行かない(パスが通ってない)ため
解決法
2種類(+α)の解決方法が存在
①sudoを使ってモジュール再インストール
全体に適用させたい場合におすすめ、あと簡単
個別ユーザーと全体に同じものが2つ入るので容量が重いmoduleだとやだ
方法
sudo pip xxxxx
のようにsudoを使って再インストール
②pythonファイル内にて明示的にpathを追加する
とりあえず自分自身の環境で実行する場合におすすめ
pythonにコードを追加する必要あり
方法
import sys
sys.path.append('追加したいパス')
# 例えば /home/"ユーザーネーム"/.local/lib/python3.9/site-packages
補足
対象のpythonファイルに以下を追加して
実行できる環境と、そうでない環境(.shによる実行環境など)で対象のpythonファイルを実行すると
それぞれで参照している環境変数pathがわかるのでどのpathが足りていないか比較できる
→追加すべきパスがわかる
import sys
print(sys.path)
+α pyファイルの実行をユーザーで実行する
検証していないがこの方法で行けるかも
方法
sudo -u username pythonのパス pytonのファイル.py
例
sudo -u pi /usr/bin/python3.9 /usr/bin/test.py