Мое cx_Freeze
приложение закрывается, когда я его открываю, и никаких ошибок не печатается. Установочный файл работает без ошибок. Я считаю, что это как-то связано с импортом в моем основном коде. Я использовал Python 3.6.5 cx_Freeze 6.0b1 и Windows 10.
setup.py
import os
from cx_Freeze import setup, Executable
include_lst = []
package_lst = ['numpy', 'scipy', 'pulp', 'pubsub', 'sqlite3', 'pandas',
'wx', 'functools', 'sklearn', 'numpy.core._methods']
exclude_lst = ['matplotlib', 'tkinter', 'PyQt4.QtSql', 'PyQt5',
'PyQt4.QtNetwork', 'PyQt4.QtScript', 'sqlalchemy']
base = None
setup (
name='test',
version='0.01',
author='test',
author_email='Omitted',
options={'build_exe':
{'packages': package_lst,
'excludes': exclude_lst,
'include_files': include_lst
}
},
executables=[Executable('main_.py', base=base, icon=icon_file)]
)
Когда я замораживаю этот базовый пример, он работает без проблем
main.py
import wx
class MasterPage (wx.Frame):
def __init__(self, *args, **kwargs):
wx.Frame.__init__(self, *args, **kwargs)
self.createFrame()
def createFrame(self):
self.width, self.height = wx.GetDisplaySize()
self.SetTitle('Test')
self.SetSize(wx.Size((self.width-50, self.height-50)))
self.SetMinSize((1080, 720))
self.W, self.H = self.GetSize()
self.Bind(wx.EVT_CLOSE, self.onQuit)
self.Centre()
def onQuit(self, event):
"""Checks to make sure the user wants to leave the program"""
dlg = wx.MessageDialog(self,'Do you really want to quit?',
'Confirm Exit',
wx.ICON_QUESTION|wx.OK|wx.CANCEL )
result = dlg.ShowModal()
dlg.Destroy
if result == wx.ID_OK:
self.Destroy()
if __name__.endswith('__main__'):
app = wx.App()
MasterPage(None).Show()
app.MainLoop()
Но когда я добавляю import pandas
или import <any module>
над строкой import wx
, приложение cx_Freeze
закрывается, как только я его открываю
main.py
import pandas
import wx
class MasterPage (wx.Frame):
def __init__(self, *args, **kwargs):
wx.Frame.__init__(self, *args, **kwargs)
self.createFrame()
def createFrame(self):
self.width, self.height = wx.GetDisplaySize()
self.SetTitle('Test')
self.SetSize(wx.Size((self.width-50, self.height-50)))
self.SetMinSize((1080, 720))
self.W, self.H = self.GetSize()
self.Bind(wx.EVT_CLOSE, self.onQuit)
self.Centre()
def onQuit(self, event):
"""Checks to make sure the user wants to leave the program"""
dlg = wx.MessageDialog(self,'Do you really want to quit?',
'Confirm Exit',
wx.ICON_QUESTION|wx.OK|wx.CANCEL )
result = dlg.ShowModal()
dlg.Destroy
if result == wx.ID_OK:
self.Destroy()
if __name__.endswith('__main__'):
app = wx.App()
MasterPage(None).Show()
app.MainLoop()
Я также попытался поместить импорт в попытку, за исключением утверждения, что он все равно не откроется и ошибок нет.
main.py
try:
import pandas
except Exception as e:
print(e)
import wx
class MasterPage (wx.Frame):
def __init__(self, *args, **kwargs):
wx.Frame.__init__(self, *args, **kwargs)
self.createFrame()
def createFrame(self):
self.width, self.height = wx.GetDisplaySize()
self.SetTitle('Test')
self.SetSize(wx.Size((self.width-50, self.height-50)))
self.SetMinSize((1080, 720))
self.W, self.H = self.GetSize()
self.Bind(wx.EVT_CLOSE, self.onQuit)
self.Centre()
def onQuit(self, event):
"""Checks to make sure the user wants to leave the program"""
dlg = wx.MessageDialog(self,'Do you really want to quit?',
'Confirm Exit',
wx.ICON_QUESTION|wx.OK|wx.CANCEL )
result = dlg.ShowModal()
dlg.Destroy
if result == wx.ID_OK:
self.Destroy()
if __name__.endswith('__main__'):
app = wx.App()
MasterPage(None).Show()
app.MainLoop()
Я даже включил оператор print перед оператором import
, а после оператора import
запускается первый оператор печати, а затем приложение закрывается.
main.py
print('app started')
import pandas
print('import worked')
import wx
class MasterPage (wx.Frame):
def __init__(self, *args, **kwargs):
wx.Frame.__init__(self, *args, **kwargs)
self.createFrame()
def createFrame(self):
self.width, self.height = wx.GetDisplaySize()
self.SetTitle('Test')
self.SetSize(wx.Size((self.width-50, self.height-50)))
self.SetMinSize((1080, 720))
self.W, self.H = self.GetSize()
self.Bind(wx.EVT_CLOSE, self.onQuit)
self.Centre()
def onQuit(self, event):
"""Checks to make sure the user wants to leave the program"""
dlg = wx.MessageDialog(self,'Do you really want to quit?',
'Confirm Exit',
wx.ICON_QUESTION|wx.OK|wx.CANCEL )
result = dlg.ShowModal()
dlg.Destroy
if result == wx.ID_OK:
self.Destroy()
if __name__.endswith('__main__'):
app = wx.App()
MasterPage(None).Show()
app.MainLoop()