簡體   English   中英

為什么使用/ usr / bin / env會破壞我的Python導入?

[英]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 ,果然腳本工作正常。

所以我的問題有兩個:

  1. 為什么使用/usr/bin/env python破壞我的導入?
  2. 如何在不使用/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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM