2016-07-29 232 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

我想你之所以會得到低報酬的原因是因爲這個錯誤與你的script.py沒有一個名爲googlemaps的模塊,當你試圖導入googlemaps時。 – Alastair

+0

另請參閱:http://stackoverflow.com/questions/7332299/trace-python-imports – jmunsch

+0

同時使用'virtualenv'或'venv'通常也很有幫助。 – jmunsch

回答

1

您的問題是在腳本本身,你的bash代碼是OK!如果你沒有問題直接從bash運行python scrip.py,你應該測試你是否對這兩個調用使用同一個解釋器。您可以檢查python腳本中的shebang行,它是文件中的第一行,例如#!/usr/bin/env python#!/usr/bin/python,並且在輸出不同的情況下將其與which python命令的輸出進行比較嘗試更改或將shebang行添加到文件中。如果你在bash中直接調用文件./some_script.py bash會讀取第一行,如果是shebang行,他將執行文件的特定命令。我的觀點是,如果你使用兩個不同的解釋器直接調用文件python script.py和間接./script.py其中一個可能沒有適當的python模塊。

HOWTO代碼:

$ which python 
/usr/local/bin/python 

所以第二行是爲您解釋打造家當從它在你的腳本文件本的第一行寫的路徑。

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

bash:#!/ bin/bash python:#!/ usr/bin/env python .... should I change是這樣的? – Levenlol

+0

如果python script.py工作更新的答案應該使其工作。 – flipvarga

3

還有更多這個故事是不是在你的問題。 您的PYTHONPATH變量在某處一直在困惑。
插入一對夫婦的快速測試線:

在bash

echo $PYTHONPATH 
在你的Python

import os 
print os.environ["PYTHONPATH"] 

在某一點上,路徑的GoogleMaps迷路了。