5

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

次の行では決して実行されません。

4

2 に答える 2

8

py2app(またはsetup.py)には、アプリケーションコードにファイルをインポートしたという理由だけで、魔法のようにファイルが含まれることはありません。

あなたの説明から、predictmiP.pyファイルがどこにあるか、mip3.pyファイルがどこにあるか、setup.pyファイルがどこにあるか、そしてディレクトリツリーの残りの部分がどのように見えるかは私にはよくわかりません。

したがって、Pythonファイルのパッケージ化に関するいくつかの一般的な注意事項(http://docs.python.org/2.7/distutils/index.htmlも参照)。ファイルが数個しかない場合は、それらを明示的にリストできます。

setup(
    py_modules=['file1', 'file2']
)

これにはとが含まfile1.pyfile2.pyます。もちろん、ファイルがたくさんある場合は面倒なので、setup.pyに、見つかったすべてのPythonファイルを含めるように指示できます。

setup(
    package='example',
)

exampleこれは、を含むという名前のディレクトリを想定しており__init__.py、そこにあるすべてのPythonファイルが含まれます。

srcPythonファイルを含むディレクトリなど、別のディレクトリレイアウトがある場合は、次のように設定します。

setup(
    package='example',
    package_dir={'': 'src'}
)

これはディレクトリを想定してsrc/exampleおり、その下にPythonファイルが含まれています。

于 2012-12-09T10:17:35.830 に答える
6

setup.py が提供されていないため、次のようなものではないと思います。

from setuptools import setup

OPTIONS = {'packages' : ['predictmiP']}

setup(app=someapp.py, options={'py2app' : OPTIONS},
      setup_requires=['py2app'])

それともあなたが探しているのOPTIONS['includes']ですか?それとも多分OPTIONS['frameworks']

于 2012-12-04T23:01:27.257 に答える