我有一个制作 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 一起使用?
我的设置.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
在接下来的几行中永远不会被执行。
最佳答案
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.py
和 file2.py
。如果你有很多文件,那当然会很乏味,所以你可以告诉 setup.py 包含它找到的所有 Python 文件,如下所示:
setup(
package='example',
)
这需要一个名为 example
的目录,其中包含一个 __init__.py
,并将包含在那里找到的所有 Python 文件。
如果您有不同的目录布局,例如包含 Python 文件的 src
目录,设置如下:
setup(
package='example',
package_dir={'': 'src'}
)
这需要一个目录 src/example
,并包含下面的 Python 文件。
关于python - 如何将多个文件添加到py2app?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13654610/