2

我正在尝试使用 Xcode 的用户脚本菜单运行 Python 脚本。

我遇到的问题是,从 XCode 运行脚本时,我通常的 os.sys.path(取自 ~/.profile)似乎没有像在终端(或使用 IPython)上运行它们时那样导入。我得到的只是默认路径,这意味着我不能做类似的事情

#!/usr/bin/python
import myScript

myScript.foo()

myScript 是我添加到路径中的文件夹中的一个模块。

我可以很容易地手动将特定路径附加到 os.sys.path ,但是我必须在每个脚本中为每个我想使用模块的单个路径执行此操作

有没有办法设置它,所以它使用我在其他地方使用的相同路径?

编辑:在进一步研究之后,似乎从 Xcode 执行的脚本使用的 PATH 与正常情况完全不同。我通过在 Xcode 中运行脚本得到的路径是:

PATH=/Developer/usr/bin:/usr/bin:/bin:/usr/sbin:/sbin

而且我确定我的常规路径中没有 /Developer/usr/bin 。有人知道这条路从何而来吗?

4

6 回答 6

4

在 Mac 上,.profile 中的环境变量对终端外的应用程序不可见。

如果您希望 xcode 应用程序可以使用环境变量(如 PATH、PYTHONPATH 等),则应将其添加到您在 ~/.MacOSX/environment.plist 中创建的新 plist 文件中。

有关更多详细信息,请参阅Apple 开发者网站上的EnvironmentVars文档。

于 2008-12-13T04:23:46.337 回答
1

一种快速但不成熟的方法是为 python 提供一个包装脚本。

cat > $HOME/bin/mypython << EOF
#!/usr/bin/python
import os
os.path = ['/list/of/paths/you/want']
EOF

然后启动所有 XCode 脚本

#!/Users/you/bin/mypython
于 2008-12-13T02:16:06.423 回答
1

只需将路径添加到 sys,path。

>>> import sys
>>> sys.path
['', ... lots of stuff deleted....]
>>> for i in sys.path:
...     print i
... 

/System/Library/Frameworks/Python.framework/Versions/2.5/lib/python25.zip
/System/Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5
/System/Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/plat-darwin
/System/Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/plat-mac
/System/Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/plat-mac/lib-scriptpackages
/System/Library/Frameworks/Python.framework/Versions/2.5/Extras/lib/python
/System/Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/lib-tk
/System/Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/lib-dynload
/Library/Python/2.5/site-packages
/System/Library/Frameworks/Python.framework/Versions/2.5/Extras/lib/python/PyObjC
>>> sys.path.append("/Users/crm/lib")
>>> for i in sys.path:
...     print i
... 

/System/Library/Frameworks/Python.framework/Versions/2.5/lib/python25.zip
/System/Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5
/System/Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/plat-darwin
/System/Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/plat-mac
/System/Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/plat-mac/lib-scriptpackages
/System/Library/Frameworks/Python.framework/Versions/2.5/Extras/lib/python
/System/Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/lib-tk
/System/Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/lib-dynload
/Library/Python/2.5/site-packages
/System/Library/Frameworks/Python.framework/Versions/2.5/Extras/lib/python/PyObjC
/Users/crm/lib
>>> 
于 2008-12-13T03:18:11.773 回答
1

我倾向于使用pth文件。从文档。

最方便的方法是将路径配置文件添加到 Python 路径上已经存在的目录中,通常是 .../site-packages/ 目录。路径配置文件的扩展名为 .pth,每行必须包含一个将附加到 sys.path 的路径。(因为新的路径附加到 sys.path 中,添加的目录中的模块不会覆盖标准模块。这意味着您不能使用这种机制来安装标准模块的固定版本。)

因此,最简单的方法是执行以下操作:

echo "/some/path/I/want/to/add" > /Library/Python/2.5/site-packages/custom.pth

高温高压

于 2009-11-06T03:28:58.427 回答
0

如果我的回答看起来很无知,请原谅我,我对 Mac 并不完全熟悉,我也可能误解了你的问题。

在 Windows 和 Linux 上,当我想引用我编写的脚本时,我设置了 PYTHONPATH 环境变量。如果我没记错的话,这就是 os.sys.path 从中获取值的地方。

假设 myScript.py 在 /Somewhere 中。将 PYTHONPATH 设置为:

PYTHONPATH = /Somewhere

现在您应该可以“导入 myScript”了。

如果您开始将子文件夹作为 python 包进行,请查看每个文件夹中init .py 文件的使用情况。

如果您计划一直重复使用此脚本和其他脚本,则应将 PYTHONPATH 设置为环境变量。

于 2008-12-13T03:22:09.473 回答
0

不确定 Xcode 是否算作通过 Finder 启动脚本,但如果确实如此,显然 Finder在为用户启动时不会像终端那样读取.profile或文件。.cshrc

如果您的问题仍未得到解答,请查看 Apple 的知识库:QA1067并使用plist.

于 2011-11-08T17:06:47.990 回答