我有一个基于wxpython的应用程序,使用解释器运行良好。当我尝试将它在MacOS上打包到单个应用程序包时,PyInstaller会在没有错误的情况下完成并在/ dist中创建一个应用程序包。运行创建的包没有任何作用。该应用程序刚刚启动,然后完成,没有任何错误。在/ dist中运行另外创建的非捆绑文件也可以完成而无需执行任何操作 - 并且不会提供任何错误消息。
现在令人惊讶的是,当源代码(具有不同的类)在单个.py源文件中时,PyInstaller会创建一个完全正常运行的应用程序包。
这里有一些最小的代码,可以看到发生了什么。
myapp.py:
#!/usr/bin/env pythonw
# -*- coding: utf-8 -*-
import wx
from myapp.App import App
if __name__ == "__main__":
myapp = App()
myapp.app.MainLoop()
的myapp / App.py:
import wx
class App(wx.Frame):
def __init__(self):
self.app = wx.App(False)
wx.Frame.__init__(self, parent=None, title="Window")
wx.StaticText(self, wx.ID_ANY, label="Hello World!", style=wx.ALIGN_CENTER)
self.Show()
运行./myapp.py
以单一窗口启动应用程序。好。
使用以下命令使用PyInstaller打包应用程序会创建应用程序,但该应用程序不执行任何操作:
pyinstaller --windowed --clean --onefile -y myapp.py
然而,将所有代码放在一个文件中,一切都开始有效。
single-myapp.py
#!/usr/bin/env pythonw
# -*- coding: utf-8 -*-
import wx
class App(wx.Frame):
def __init__(self):
self.app = wx.App(False)
wx.Frame.__init__(self, parent=None, title="Window")
wx.StaticText(self, wx.ID_ANY, label="Hello World!", style=wx.ALIGN_CENTER)
self.Show()
if __name__ == "__main__":
myapp = App()
myapp.app.MainLoop()
现在PyInstaller按预期工作并创建一个功能应用程序:
pyinstaller --windowed --clean --onefile -y single-myapp.py
我有点失去了这里发生的事情。我尝试了对pyinstaller命令的几个修改,一个是使用-p选项提供/ myapp /的路径。
以下是使用的版本: