![](/img/trans.png)
[英]Why my python executable does not default to /usr/local/bin?
[英]Why does using /usr/bin/env break my Python import?
OSX 10.8.2上的Python 2.7.3
我正在編寫一個導入markdown模塊的腳本。 我使用#!/usr/bin/env python
shebang來實現可移植性。 當我通過./myscript.py arg1
直接在shell中運行腳本時,腳本運行正常
當我從(登錄)shell外部運行腳本時,例如通過AppleScript do shell script "/path/to/myscript.py " & quoted form of arg1
,它失敗了
myscript.py", line 8, in <module>
import markdown
ImportError: No module named markdown
我猜這可能是shebang的一個問題,所以我將shebang改為我的python位置#!/usr/local/bin/python
,果然腳本工作正常。
所以我的問題有兩個:
/usr/bin/env python
破壞我的導入? /usr/local/bin/python
情況下避免此問題? #!/usr/bin/env python
意思是“在$PATH
上找到python
,好像shell正在尋找它,然后運行它。” 因此,由於得到不同的結果,您可能使用不同的蟒蛇。
要檢查,看看運行/usr/local/bin/python
和/usr/bin/env python
給你相同的pythons。 你也可以使用type -a python
來查找$PATH
上的每個python
。 在我的系統上, type -a python
給出:
python is /opt/local/bin/python
python is /usr/bin/python
python is /usr/local/bin/python
(第一個是由MacPorts安裝的。)
無論如何,正如羅德里戈指出的那樣,直接發射可能不會使用你期望的$PATH
。 這意味着使用/usr/bin/env
無法正常工作。
好吧,看起來登錄shell中的PATH環境變量與AppleScript進程中的不同。
我的猜測是你有一個.profile
文件或類似的行:
PATH=/usr/local/bin:$PATH
但是只有在打開shell而不是從其他進程打開時才會執行該文件。 顯然,你在/usr/bin/python
中有一個不同版本的Python沒有markdown模塊。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.