1

始める前にいくつかのシステム/ソフトウェア情報:

OS: Mac OS X 10.7.1

Python: アクティブな Python 2.7.2.5

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

Mac プラットフォームでの cvs と svn の可用性をテストするだけの小さな wxpython ベースの 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()

これは、「実行」という 1 つのボタンを備えたこの単純な GUI のスクリーン ショットです。

単一の「実行」ボタンを備えた単純な cvs テスト アプリのスクリーン ショット

「実行」を押すと、OnRun メソッドが実行され、「cvs」と「svn help」という 2 つのコマンドの出力が、ユーザーのホーム ディレクトリにある「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

OS X Lion での cvs の問題を解決するために、 Apple フォーラム (ここをクリック) に投稿されたトリックに従って、パス '/Developer/usr/bin' を追加しました。

コマンドラインから実行されたときにPythonスクリプトがcvsを識別し、同じスクリプトがコンパイルされたMacアプリとして実行されたときに識別されない原因は何ですか?

この質問は私を殺しています。私の bash と sh は両方とも、端末から実行すると cvs を見つけることができますが、Mac アプリではできません。どんな提案でも大歓迎です。

4

2 に答える 2

2

ターミナルではなく Finder/Dock から OSX GUI アプリを実行すると、新しいシェルが開始されないため、.profile が読み取られません。

Apple docに従って ~/.MacOS/environment.plist に環境変数を設定できます

環境を設定する (パスに追加するなど) か、Python スクリプトで cvs と svn への完全なパスを明示的に使用することもできます。

于 2011-09-05T17:02:57.013 に答える
1

以下を追加してみてください。

import os
print os.environ["PATH"]

あなたのアプリに。コマンドラインから Python コードを実行したときと同じパスで実行されていないと思われます。

パスが期待したものではないことが判明した場合は、アプリで /usr/local/bin を os.enviorn["PATH"] に追加することができます。アプリにこれらのツールが必要なだけの場合、これは良い解決策になる可能性があります。

于 2011-09-05T16:56:15.873 に答える