首页 文章

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

提问于
浏览
4

我有一个python脚本,它可以创建一个GUI . 当在此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:

msgstr“”“这是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

在下一行中永远不会执行 .

2 回答

  • 4

    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文件 .

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

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

    这需要一个目录 src/example ,并在那里包含Python文件 .

  • 6

    由于没有提供你的setup.py,我猜它不会像这样:

    from setuptools import setup
    
    OPTIONS = {'packages' : ['predictmiP']}
    
    setup(app=someapp.py, options={'py2app' : OPTIONS},
          setup_requires=['py2app'])
    

    或许你在寻找 OPTIONS['includes'] ?或者 OPTIONS['frameworks']

相关问题