2011-09-05 44 views
1

某些系統/軟件信息在開始之前創建的:CVS命令不受Python的Mac應用程序使用發現py2app

操作系統:Mac OS X 10.7.1

的Python:Python的主動2.7.2.5

wxPython:wxPython2.9-osx-2.9.1.1-cocoa-py2.7

我有一個小的基於wxpython的Mac應用程序,它只是在Mac平臺上測試cvs和svn的可用性。這是在其Mac應用程序是基於Python代碼:

import wx 
import commands,os 

ID_RUN_BUTTON=1 
class Frame(wx.Frame): 
    def __init__(self, parent, id, title): 
      wx.Frame.__init__(self, parent, id, title, size=(100, 100),style=wx.MINIMIZE_BOX | wx.CLOSE_BOX) 
      self.run_button=wx.Button(self,ID_RUN_BUTTON,label='Run') 
      self.Bind(wx.EVT_BUTTON, self.OnRun,id=ID_RUN_BUTTON) 
      self.Centre() 
      self.Show() 

    def OnRun(self,evt): 
      home_dir=os.path.expanduser("~") 
      a=commands.getoutput("cvs") 
      b=commands.getoutput("svn help") 
      f=open('%s/cvs_test' % (home_dir),'w') 
      f.write(a) 
      f.write('\n') 
      f.write(b) 
      f.close() 

if __name__ == '__main__': 
    app = wx.App(redirect=False) 
    frame = Frame(None, -1, 'CVS Tester') 
    app.MainLoop() 

下面是這個簡單的界面的屏幕截圖與所謂的「運行」一個鍵。

screen shot of the simple cvs test app with a single 'Run' button

在按下「運行」它執行OnRun方法,它的兩個命令「CVS」和「svn help」以輸出保存到一個用戶的主目錄下名爲「cvs_test」文件。當我在命令行上使用python解釋器運行此代碼時,這兩個命令的輸出都會吐入一個文本文件中。 cvs和svn命令都被識別,文件cvs_test中的輸出如預期的那樣。

現在的問題是,當我創建使用py2app與下面的腳本在Mac應用程序:

""" 
This is a setup.py script generated by py2applet 

Usage: 
    python setup.py py2app 
""" 

from setuptools import setup 

APP = ['cvs_test.py'] 
DATA_FILES = [('icons',['./icons/ark-2.png'])] 
OPTIONS = {'iconfile': './icons/ark-2.icns'} 

setup(app=APP,data_files=DATA_FILES,options={'py2app': OPTIONS},setup_requires=['py2app']) 

的Mac應用程序創建精美絕倫。但是,當我打開Mac應用程序並點擊「運行」按鈕,在其創建的cvs_test文件,它說:

SH:CVS:找不到命令」

的Mac應用程序顯然是運行相同的腳本,但找不到cvs命令。

在我的主目錄,以下是我的.profile文件的內容:

export TERM="xterm" 
export PATH='/Developer/usr/bin':$PATH 
export PATH='/usr/local/bin':$PATH 

我按照張貼在蘋果論壇上招添加路徑「/開發人員的/ usr/bin中」(click here)解決OS X Lion上的cvs問題。

什麼原因導致python腳本在從命令行運行時識別cvs,並且在編譯的Mac應用程序運行同一腳本時未識別它?

這個問題殺了我。我的bash和他們兩個都可以在終端上運行時找到cvs,但是Mac應用不能。任何建議將不勝感激。

回答

2

當您從Finder中/碼頭一OSX GUI應用程序,即沒有新的外殼沒有啓動這樣你的.profile文件是看不懂的終端。

您可以在〜/ .MacOS/environment.plist每Apple doc

,你也可以設置環境的環境變量(例如添加到路徑)或明確使用完整路徑CVS和SVN的python腳本

+0

然而,退出並重新將允許在.profile中新設置被拾起.. –

+0

@馬克。那就對了。 OSX GUI應用程序不會讀取.profile。我編輯使用屬性列表編輯器的〜/ .MacOS/environment.plist文件並重新啓動MAC(重新啓動被要求)。不重新啓動,如果我嘗試使用GUI應用程序,它不會識別。但是,現在重新啓動後,當我運行GUI應用程序時,它會識別cvs並將預期的輸出打印到cvs_test文件。非常感謝您的幫助 :) – user699540

1

嘗試添加以下內容:

import os 
print os.environ["PATH"] 

到您的應用程序。我懷疑它沒有像從命令行運行Python代碼那樣運行相同的路徑。

如果事實證明您的路徑不符合您的預期,可以讓您的應用程序將/ usr/local/bin附加到os.enviorn [「PATH」]。如果您只是需要這些工具,那麼這可能是一個很好的解決方案。

+0

你是對的。通過腳本打印的路徑是:在/ usr/local/bin目錄:/開發人員在/ usr/bin中:在/ usr/bin中:/ bin中:/ usr/sbin目錄:/ sbin目錄:在/ usr/local/bin目錄:在/ usr/X11 /斌:在/ usr /本地/ MySQL的/斌:/選擇/ local/bin目錄:在/ usr /本地/ git的/ bin中。但是到了Mac應用程序打印的路徑是:在/ usr/bin中:/ bin中:/ usr/sbin目錄:/ sbin目錄:在/ usr/local/bin目錄:在/ usr/X11/bin中中:/ opt/local/bin目錄:在/ usr /本地/ git的/ bin中。所以顯然它並沒有使用'/ Developer/usr/bin'路徑。我應該怎樣做才能使用正確的道路? – user699540

+0

我添加了幾行,但看起來您已經找到了解決方案。 –

相關問題