5

OSX 10.8.2 上的 Python 2.7.3

我目前正在编写一个导入降价模块的脚本。我使用#!/usr/bin/env pythonshebang是为了便携。当我直接在shell中运行脚本时,脚本运行良好./myscript.py arg1

当我从(登录)外壳外部运行脚本时,例如通过 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
4

2 回答 2

4

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

要检查,看看是否运行/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是行不通的。

于 2013-04-07T23:55:38.553 回答
1

好吧,看起来登录 shell 中的 PATH 环境变量与 AppleScript 进程中的不同。

我的猜测是你有一个.profile文件或类似的行:

PATH=/usr/local/bin:$PATH

但是该文件仅在您打开 shell 时才会执行,而不是从其他进程中执行。显然你有一个不同版本的 Python /usr/bin/python,它没有 markdown 模块。

于 2013-04-07T23:55:14.113 回答