从xcode宏运行python脚本时如何使用我的标准python路径

时间:2008-12-13 01:50:39

标签: python xcode macos path

我正在尝试使用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。有没有人知道这条路的来源?

6 个答案:

答案 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)

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

如果您的问题仍未得到答复,请查看Apple的知识库:QA1067并使用plist设置您的环境。

答案 5 :(得分:0)

请原谅我,如果我的答案似乎无知,我对Mac并不完全熟悉,我也可能误解了你的问题。

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

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

PYTHONPATH = /Somewhere

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

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

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