0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

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

Last updated at Posted at 2024-08-18

事象

raspberry Pi や linuxを使っているときにシェルスクリプト(.sh)でpythonを実行すると
importエラー(ModuleNotFoundError)が出る

原因

shで実行すると個別ユーザーでpip installしたモジュールフォルダを見に行かない(パスが通ってない)ため

解決法

方法① pyファイルの実行を明示的にユーザーで実行する

一番楽

方法

sudo -u username pythonのパス pytonのファイル.py 

sudo -u pi /usr/bin/python3.9 /usr/bin/test.py

方法② 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)
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

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?