Некоторые сведения о системе / программном обеспечении перед началом работы:
ОС: Mac OS X 10.7.1
Python: активный Python 2.7.2.5
wxPython: wxPython2.9-osx-2.9.1.1-какао-py2.7
У меня есть небольшое Mac-приложение на основе wxpython, которое просто проверяет наличие cvs и svn на платформе Mac. Это код Python, на котором основано приложение Mac:
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()
Вот снимок экрана этого простого графического интерфейса с одной кнопкой под названием «Выполнить».
При нажатии «Выполнить» он выполняет метод OnRun и сохраняет выходные данные двух команд «cvs» и «svn help» в файл с именем «cvs_test» в домашнем каталоге пользователя. Когда я запускаю этот код, используя интерпретатор python в командной строке, вывод обеих команд выводится в текстовый файл. Обе команды cvs и svn распознаются, и выходные данные в файле cvs_test соответствуют ожидаемым.
Теперь проблема в том, когда я создаю приложение Mac с помощью py2app со следующим скриптом:
"""
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
Я добавил путь '/ Developer / usr / bin', следуя трюку, опубликованному на форумах Apple ( нажмите здесь ), чтобы решить проблему cvs в OS X Lion.
Что заставляет скрипт python идентифицировать cvs при запуске из командной строки, а не идентифицировать его при запуске того же скрипта, что и скомпилированное приложение Mac?
Этот вопрос убивает меня. Мой bash и sh оба могут найти cvs при запуске из терминала, но приложение Mac не может. Любые предложения будут с благодарностью.