У меня есть скрипт python, который создает графический интерфейс. Когда в этом графическом интерфейсе нажимается кнопка «Выполнить», она запускает функцию из импортированного пакета (который я сделал), например
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, все работает хорошо, и программа записывает выходной файл. Однако, когда я превращаю его в приложение, запускается графический интерфейс, но когда я нажимаю кнопку, ничего не происходит. PredictmiP включается в build/bdist.macosx-10.3-fat/python2.7-standalone/app/collect/, как и все другие импорты, которые я использую (хотя он пуст, но он такой же, как и все остальные импорты). У меня есть).
Как я могу получить несколько файлов python или импортированный пакет для работы с py2app?
мой setup.py:
""" Это сценарий setup.py, сгенерированный py2applet.
Использование: 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'],
)
редактировать:
Вроде работало, но работает недолго. Из моего графического интерфейса я звоню
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
в следующих строках никогда не выполняется.