OSX 10.8.2上的Python 2.7.3
我正在编写一个导入markdown模块的脚本。我使用#!/usr/bin/env python
shebang来实现可移植性。当我通过./myscript.py arg1
当我从(登录)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
?答案 0 :(得分:3)
#!/usr/bin/env python
表示“在python
上查找$PATH
,就像shell正在寻找它一样,然后运行它。”所以,由于你得到不同的结果,你可能正在使用不同的蟒蛇。
要查看,请查看运行/usr/local/bin/python
和/usr/bin/env python
是否为您提供相同的蟒蛇。您还可以使用type -a python
查找python
上的每个$PATH
。在我的系统上,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
无效。
答案 1 :(得分:1)
好吧,看起来登录shell中的PATH环境变量与AppleScript进程中的不同。
我的猜测是你有一个.profile
文件或类似的行:
PATH=/usr/local/bin:$PATH
但是只有在打开shell而不是从其他进程打开时才会执行该文件。显然,你在/usr/bin/python
中有一个不同版本的Python没有markdown模块。