我有一个创建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
在下一行中永远不会被执行。
答案 0 :(得分:6)
py2app(或者更确切地说,setup.py)并不神奇地包含文件,只是因为你在应用程序代码中导入它们。
根据你的描述,我不太清楚predictmiP.py文件的位置,mip3.py文件所在的位置,setup.py文件所在的位置,以及目录树的其余部分的外观。 / p>
所以,关于打包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文件。
答案 1 :(得分:4)
由于未提供setup.py,我猜它不会像:
from setuptools import setup
OPTIONS = {'packages' : ['predictmiP']}
setup(app=someapp.py, options={'py2app' : OPTIONS},
setup_requires=['py2app'])
或者您正在寻找OPTIONS['includes']
?或者也许是OPTIONS['frameworks']
?