我正在尝试使用Xcode的User Scripts菜单运行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。有没有人知道这条路的来源?
答案 0 :(得分:5)
在mac上,.profile中的环境变量对终端外的应用程序不可见。
如果您希望xcode应用程序可以使用环境变量(如PATH,PYTHONPATH等),则应将其添加到您在〜/ .MacOSX / environment.plist中创建的新plist文件中。
有关详细信息,请参阅Apple开发人员网站上的EnvironmentVars文档。
答案 1 :(得分:1)
快速而又hackish的方法是为python创建一个包装脚本。
cat > $HOME/bin/mypython << EOF
#!/usr/bin/python
import os
os.path = ['/list/of/paths/you/want']
EOF
然后使用
启动所有XCode脚本#!/Users/you/bin/mypython
答案 2 :(得分: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
>>>
答案 3 :(得分:1)
我倾向于使用pth个文件。来自文档。
最方便的方法是添加一个 路径配置文件到目录 那已经在Python的路径上, 通常到... / site-packages / 目录。路径配置文件 扩展名为.pth,每个 line必须包含单个路径 将附加到sys.path。 (因为 新路径附加到 sys.path,添加的模块 目录不会覆盖标准 模块。这意味着你不能使用它 安装固定机制 标准模块的版本。)
所以最简单的方法是执行以下操作:
echo "/some/path/I/want/to/add" > /Library/Python/2.5/site-packages/custom.pth
HTH
答案 4 :(得分:0)
请原谅我,如果我的答案似乎无知,我对Mac并不完全熟悉,我也可能误解了你的问题。
在Windows和Linux上,当我想参考我编写的脚本时,我设置了PYTHONPATH环境变量。如果我没记错的话,那就是os.sys.path从中获取它的值。
假设myScript.py在/ Somewhere中。将PYTHONPATH设置为:
PYTHONPATH = /Somewhere
现在你应该可以“导入myScript”了。
如果您开始将子文件夹作为python包,请查看每个文件夹中 init .py文件的使用情况。
如果您计划一直重复使用此脚本和其他脚本,则应将PYTHONPATH设置为环境变量。
答案 5 :(得分:0)
不确定Xcode是否算作通过Finder启动脚本,但如果确实如此,显然Finder在为用户启动时不会读取.profile
或.cshrc
文件,就像终端所做的那样。
如果您的问题仍未得到答复,请查看Apple的知识库:QA1067并使用plist
设置您的环境。