Команда cvs не найдена приложением Python Mac, созданным с помощью py2app - PullRequest
1 голос
/ 05 сентября 2011

Некоторые сведения о системе / программном обеспечении перед началом работы:

ОС: 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()

Вот снимок экрана этого простого графического интерфейса с одной кнопкой под названием «Выполнить».

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

При нажатии «Выполнить» он выполняет метод 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 не может. Любые предложения будут с благодарностью.

Ответы [ 2 ]

2 голосов
/ 05 сентября 2011

Когда вы запускаете приложение OSX GUI из Finder / Dock, т.е. не из терминала, новая оболочка не запускается, поэтому ваш .profile не читается.

Вы можете установить переменные окружения в ~ / .MacOS / environment.plist согласно Apple doc

Вы также можете установить среду (например, добавить к пути) или явно использовать полные пути к cvs и svn в скрипте python

1 голос
/ 05 сентября 2011

Попробуйте добавить следующее:

import os
print os.environ["PATH"]

в ваше приложение. Я подозреваю, что он не работает по тому же пути, что и при запуске кода Python из командной строки.

Если окажется, что ваш путь не такой, как вы ожидали, ваше приложение может добавить / usr / local / bin к os.enviorn ["PATH"]. Это может быть хорошим решением, если вам просто нужны эти инструменты для вашего приложения.

...