在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
,而是使用了非登录shell。我猜测在这样的shell中,/usr/local/bin
没有被添加到PATH
中,或者至少没有在/usr/bin
之前,这就解释了为什么后者会选择python
。你是否在bash配置文件中更改了PATH
? - millimoose#!/usr/bin/env python
和#!/usr/local/bin/python
在TextWrangler中都能够完美运行,并且在终端中运行时产生了相同的结果。只有从AppleScript中调用它才会产生错误(rodrigo是正确的)。虽然TextWrangler和Terminal都给了我相同的结果,但我可以通过在AppleScript编辑器中运行do shell script "(echo 'import sys'; echo 'print sys.path';) | /usr/bin/env python"
来看到它们之间的区别。do shell script "which python"
甚至更容易些。 - n8henrie