0
1

シェルスクリプト(.sh)でpythonを実行するとimportエラーが出る

Last updated at Posted at 2024-08-18

事象

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
0
1
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1