为什么使用/ usr/bin/env会破坏我的Python导入?

n8h*_*rie 5 python shebang python-2.7

OSX 10.8.2上的Python 2.7.3

我正在编写一个导入markdown模块的脚本.我使用了#!/usr/bin/env pythonshebang来实现便携性.当我直接在shell中运行脚本时,脚本运行正常./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
Run Code Online (Sandbox Code Playgroud)

我想这可能是shebang的一个问题,所以我将shebang改为我的python位置#!/usr/local/bin/python,果然脚本运行正常.

所以我的问题有两个:

  1. 为什么使用/usr/bin/env python破坏我的导入?
  2. 如何在不使用的情况下避免此问题/usr/local/bin/python

Mik*_*one 5

#!/usr/bin/env python意思是“像 shell 正在寻找它一样去寻找它,然后运行它。python$PATH因此,由于您得到不同的结果,因此您可能使用了不同的 python。

要检查,看看是否正在运行/usr/local/bin/python/usr/bin/env python给你相同的 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
Run Code Online (Sandbox Code Playgroud)

(第一个是由 MacPorts 安装的。)

无论如何,正如罗德里戈指出的那样,直接启动可能不会使用$PATH您期望的方式。这意味着使用/usr/bin/env不会起作用。