Python 如何将多个文件添加到py2app?

Python 如何将多个文件添加到py2app?,python,import,package,py2app,Python,Import,Package,Py2app,我有一个制作GUI的python脚本。当在这个GUI中按下一个“Run”按钮时,它会从一个导入的包(我做的)中运行一个函数,如下所示 from predictmiP import predictor class MiPFrame(wx.Frame): [...] def runmiP(self, event): predictor.runPrediction(self.uploadProtInterestField.GetValue(), self.upload

我有一个制作GUI的python脚本。当在这个GUI中按下一个“Run”按钮时,它会从一个导入的包(我做的)中运行一个函数,如下所示

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

my setup.py:

“”“ 这是由py2applet生成的setup.py脚本

用法: python setup.py 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])
setup(
    package='example',
    package_dir={'': 'src'}
)
调用此函数时,我通过子进程调用的makeblastdb会输出一个文件。但是,这个计划没有继续下去,

dlg = wx.MessageDialog( self, "werkt"+self.saveOutputField, "werkt", wx.OK)
dlg.ShowModal() # Show it

在接下来的几行中,永远不会执行

由于未提供setup.py,我猜它与以下内容不同:

from setuptools import setup

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

setup(app=someapp.py, options={'py2app' : OPTIONS},
      setup_requires=['py2app'])
或者您正在寻找
选项['includes']
?或者可能
OPTIONS['frameworks']

py2app(或者更确切地说,setup.py)并没有神奇地包含文件,只是因为您在应用程序代码中导入了它们

根据您的描述,我不太清楚predictmiP.py文件位于何处,mip3.py文件位于何处,setup.py文件位于何处,以及目录树的其余部分是如何显示的

下面是一些关于打包Python文件的一般说明(另请参见)。如果您只有几个文件,可以显式列出它们:

setup(
    py_modules=['file1', 'file2']
)
这包括
file1.py
file2.py
。如果您有很多文件,这当然会变得很乏味,因此您可以告诉setup.py包含它找到的所有Python文件,如下所示:

setup(
    package='example',
)
这需要一个名为
example
的目录,其中包含一个
\uuuu init\uuuu.py
,并将包含在那里找到的所有Python文件

如果您有不同的目录布局,例如包含Python文件的
src
目录,请将其设置为:

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])
setup(
    package='example',
    package_dir={'': 'src'}
)

这需要一个目录
src/example
,其中包括下面的Python文件。

setup.py在哪里?这是什么predictmiP模块/包?纯Python还是什么?它是纯Python。我将编辑我的问题以包括我的设置。p将问题简化为一个独立的示例以获得更准确的帮助。是的,我需要为此提出一个新问题。现在可以导入软件包了,谢谢。。谢谢所以我必须将我要导入的每个包添加到包列表中?在您添加setup.py之前,我不知道您使用的是py2app。在我看到您使用py2app之后,我有点困惑,因为它应该检测导入的包/模块,并将它们包含在包中。运行python setup.py py2app生成的bundle时是否会出现错误?这可能是一个py2app错误。另一方面,我发现这通常是一件好事,因为我更喜欢直接指定我正在使用的内容,而不是浪费时间使用依赖项跟踪器。不,我不喜欢,程序只是启动,但当我按下运行按钮时,它什么也不做。现在我使用了package选项,在运行
python setup.py py2app
构建包之后,它确实“神奇地”包含了模块和包。它不包含在setup.py中,但应包含在最终捆绑包中。但我不确定他是否构建了一个捆绑包。添加python包是可行的,在命令行工具完成后,应用程序无法继续,我遇到了不同的问题,但我需要提出一个不同的问题。谢谢你的回答。