2016-07-29 27 views
1

私はbashスクリプトからpythonスクリプトを呼び出そうとしています。私は、bashスクリプトから.pyを実行しようとすると、インポートエラーが発生します。私がpython myscript.pyを実行すると、すべてが正常です。これは私のbashスクリプトです:Bashスクリプトからpythonスクリプトを呼び出す

while true; do 
    python script.py 

    echo "Restarting..."; 
    sleep 3; 
done 

私が取得エラー:

Traceback (most recent call last): 
    File "script.py", line 39, in <module> 
    from pokemongo_bot import logger 
    File "/Users/Paolo/Downloads/folder/t/__init__.py", line 4, in <module> 
    import googlemaps 
ImportError: No module named googlemaps 
+1

あなたが 'googlemapsをインポートしようとすると、エラーがあなたのscript.pyにgooglemapsという名前のモジュールを持たないことが原因です。 – Alastair

+0

参照:http://stackoverflow.com/questions/7332299/trace-python-imports – jmunsch

+0

また、 'virtualenv'または' venv'を使うと、一般的にも本当に役に立ちます。 – jmunsch

答えて

1

あなたの問題は、スクリプト自体であり、あなたのbashコードはOKです! python scrip.pyをbashから直接実行しても問題がない場合は、両方の呼び出しで同じインタープリターを使用するかどうかをテストする必要があります。 pythonスクリプトでshebang行を確認することができます。ファイル内の最初の行は#!/usr/bin/env pythonまたは#!/usr/bin/pythonです。出力が異なる場合はwhich pythonコマンドの出力と比較してください。変更するか、ファイルにシバン行を追加してみてください。もしあなたが直接bashでファイルを呼び出すならば、./some_script.py bashは最初の行を読み、それがシバン行ならばファイルの特定のコマンドを実行します。私の指摘は、python script.pyで直接ファイルを呼び出すために2つの異なるインタプリタを使用し、間接的に./script.pyのいずれかが正しいpythonモジュールを持っていない可能性があります。

ハウツーコード:

$ which python 
/usr/local/bin/python 

ので、2行目では、スクリプトファイル本の最初の行に書き、それからシェバングを構築するためにあなたのインタプリタのパスです。

#!/usr/local/bin/python 
+0

bash:#!/ bin/bash Python:#!/ usr/bin/env python ....何か? – Levenlol

+0

もしpython script.pyが動作すれば、更新された答えがうまくいくはずです。 – flipvarga

3

あなたの質問にはない以上の話があります。 あなたのPYTHONPATH変数は途中で混乱しています。 bashで

:あなたのpythonで

echo $PYTHONPATH 


は夫婦簡単なテストライン挿入し、いくつかの点で

import os 
print os.environ["PYTHONPATH"] 

を、Googleマップへのパスが失われてしまいました。

関連する問題