2008-12-13 73 views
3

我試圖使用Xcode的用戶腳本菜單運行Python腳本。如何從xcode宏運行python腳本時使用我的標準python路徑

我遇到的問題是,我通常的os.sys.path(取自〜/ .profile)在從XCode運行腳本時並不像導入終端時那樣導入(或與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 

,我相信我的正常路徑沒有/開發人員的/ usr/bin中它。有沒有人知道這條路是從哪裏來的?

回答

5

在mac上,.profile中的環境變量對終端之外的應用程序不可見。

如果您希望xcode應用程序可以使用環境變量(如PATH,PYTHONPATH等),則應將其添加到您在〜/ .MacOSX/environment.plist中創建的新plist文件中。

請參閱apple開發者網站上的EnvironmentVars文檔以獲取更多詳細信息。

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 
+0

謝謝,我會試試看。 – 2008-12-13 04:04:41

1

只需添加路徑對稱,路徑。

>>> 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 
>>> 
+0

那麼,這就是我一直在做的事情,但我不知道有什麼方法可以將我的更改保留在單個腳本之外(因爲在這種情況下設置PYTHONPATH不起作用)。你知道我錯過了什麼嗎? – 2008-12-13 04:03:33

0

原諒我,如果我的答案似乎無知,我不完全熟悉Mac,我也可能誤解了你的問題。

在Windows和Linux上,當我想引用我編寫的腳本時,我設置了PYTHONPATH環境變量。如果我沒有記錯,這是os.sys.path從中獲取它的值。

假設myScript.py在/ Somewhere。將PYTHONPATH設置爲:

PYTHONPATH = /Somewhere 

現在您應該可以「導入myScript」了。

如果您開始以python軟件包的形式執行子文件夾,請查看每個文件夾中的init .py文件的用法。

如果您打算一直重複使用此腳本和其他腳本,則應將PYTHONPATH設置爲環境變量。

+0

就是這樣,設置PYTHONPATH mac端的正常位置在〜/ .profile中,我已經完成了。這可以在使用python或IPython解釋器或從查找器運行可執行的python腳本時正常工作。只有在試圖從Xcode內運行它們時,我纔會遇到問題。 – 2008-12-13 04:01:53

+0

當我在Eclipse中的PyDev中開發Python應用程序時,PyDev從PYTHONPATH中刪除不在站點包中的東西。所以要引用這些腳本,我必須告訴它我引用的是什麼「項目」,或者在這種情況下,是腳本的路徑。也許XCode也有這個設置/功能? – 2008-12-13 04:06:01

1

我傾向於使用pth文件。來自文檔。

最方便的方法是將一個 路徑配置文件添加到目錄 這已經Python的道路上, 通常在... /站點包/ 目錄。路徑配置文件 的擴展名爲.pth,每個 行必須包含一條 將被附加到sys.path的路徑。 (由於 新路徑追加到 sys.path中,在所添加的目錄 模塊將不會覆蓋標準 模塊,這意味着不能使用這個機制 用於安裝固定 版本的標準模塊。)

所以做最簡單的事情是要做到以下幾點:

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

HTH

0

如果Xcode的COUN不知道ts作爲通過Finder啓動腳本,但如果它確實如此,顯然Finder不會像終端那樣在用戶啓動時讀取.profile.cshrc文件。

如果您的問題尚未解答,請查看Apple的知識庫:QA1067並使用plist設置您的環境。