始める前にいくつかのシステム/ソフトウェア情報:
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 のスクリーン ショットです。
「実行」を押すと、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 アプリではできません。どんな提案でも大歓迎です。