Команда cvs не найдена приложением Python Mac, созданным с помощью py2app

1

Перед загрузкой информации о некоторых системах/программных средствах:

ОС: 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. Это код 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()

Вот скриншот этого простого графического интерфейса с одной кнопкой "Выполнить".

Изображение 174551

При нажатии "Выполнить" он запускает метод 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 файле он говорит:

msgstr " 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 не может. Любые предложения будут ценны.

Теги:
macos
wxpython
py2app
cvs

2 ответа

2
Лучший ответ

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

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

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

  • 0
    Однако выход из системы и повторный вход позволят выбрать новые настройки в .profile.
  • 0
    @Отметка. Верно. Приложения OSX GUI не читают .profile. Я отредактировал файл ~ / .MacOS / environment.plist с помощью редактора списка свойств и перезапустил Mac (требуется перезагрузка). Без перезапуска, если я попытался использовать приложение с графическим интерфейсом, оно не распознает. Но теперь, после перезапуска, когда я запускаю приложение с графическим интерфейсом, оно распознает cvs и печатает ожидаемый вывод в файл cvs_test. Большое спасибо за помощь :)
1

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

import os
print os.environ["PATH"]

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

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

  • 0
    Ты прав. Путь, напечатанный сценарием: / usr / local / bin: / Developer / usr / bin: / usr / bin: / bin: / usr / sbin: / sbin: / usr / local / bin: / usr / X11 / бен: / USR / местные / MySQL / бен: / OPT / местные / бен: / USR / местные / мерзавец / бен. Но путь, напечатанный приложением Mac: / usr / bin: / bin: / usr / sbin: / sbin: / usr / local / bin: / usr / X11 / bin: / opt / local / bin: / usr / местный / мерзавец / бен. Очевидно, что он не использует путь '/ Developer / usr / bin'. Что я должен сделать, чтобы он использовал правильный путь?
  • 0
    Я добавил несколько строк, но похоже, что вы уже нашли решение.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню