开始之前的一些系统/软件信息:
操作系统: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 应用程序,它只是测试 cvs 和 svn 在 Mac 平台上的可用性。这是 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()
这是这个简单 GUI 的屏幕截图,带有一个名为“运行”的按钮。
在按下“Run”时,它会执行 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
我按照 Apple 论坛上发布的技巧(单击此处)添加了路径“/Developer/usr/bin”,以解决 OS X Lion 上的 cvs 问题。
是什么导致 python 脚本在从命令行运行时识别 cvs,而在同一脚本作为已编译的 Mac 应用程序运行时无法识别它?
这个问题想死我了。我的 bash 和 sh 从终端运行时都可以找到 cvs,但 Mac 应用程序不能。任何建议将不胜感激。