GUIを作成するPythonスクリプトがあります。この GUI で「実行」ボタンを押すと、このようにインポートされたパッケージ (私が作成したもの) から関数が実行されます。
from predictmiP import predictor
class MiPFrame(wx.Frame):
[...]
def runmiP(self, event):
predictor.runPrediction(self.uploadProtInterestField.GetValue(), self.uploadAllProteinsField.GetValue(), self.uploadPfamTextField.GetValue(), \
self.edit_eval_all.Value, self.edit_eval_small.Value, self.saveOutputField)
Python から直接 GUI を実行すると、すべて正常に動作し、プログラムは出力ファイルを書き込みます。しかし、アプリにするとGUIは起動するのですが、ボタンを押しても何も起こりません。predictmiP は、私が使用している他のすべてのインポートと同様に、build/bdist.macosx-10.3-fat/python2.7-standalone/app/collect/ に含まれます (ただし、空ですが、他のすべてのインポートと同じです)私は持っている)。
複数の python ファイル、またはインポートされたパッケージを py2app で動作させるにはどうすればよいですか?
私の setup.py:
""" これは py2applet によって生成された setup.py スクリプトです
使用法: python setup.py py2app """
from setuptools import setup
APP = ['mip3.py']
DATA_FILES = []
OPTIONS = {'argv_emulation': True}
setup(
app=APP,
data_files=DATA_FILES,
options={'py2app': OPTIONS},
setup_requires=['py2app'],
)
編集:
うまくいったように見えましたが、ほんの少ししか効果がありません。私のGUIから私は呼び出します
blast.makeBLASTdb(self.uploadAllProteinsField.GetValue(), 'allDB')
# to test if it's working
dlg = wx.MessageDialog( self, "werkt"+self.saveOutputField, "werkt", wx.OK)
dlg.ShowModal() # Show it
dlg.Destroy() # finally destroy it when finished.
blast.makeBLASTdb は次のようになります。
def makeBLASTdb(proteins_file, database_name):
subprocess.call(['/.'+os.path.realpath(__file__).rstrip(__file__.split('/')[-1])+'blast/makeblastdb', '-in', proteins_file, '-dbtype', 'prot', '-out', database_name])
この関数が呼び出され、サブプロセスを介して呼び出す makeblastdb がファイルを出力します。しかし、番組は続かず、
dlg = wx.MessageDialog( self, "werkt"+self.saveOutputField, "werkt", wx.OK)
dlg.ShowModal() # Show it
次の行では決して実行されません。