我的Python GUI应用程序完美运行,但当我尝试创建可执行文件时,我尝试使用pyinstaller(3.3.dev0 + 483c819)命令:
pyinstaller gui_app.py
我得到了以下问题:
7699 INFO: Loading module hook "hook-wx.lib.pubsub.py"...
Traceback (most recent call last):
File "<string>", line 41, in <module>
File "<string>", line 36, in walk_packages
File "<string>", line 20, in walk_packages
File "c:\python27\lib\site-packages\wx-3.0-msw\wx\lib\pubsub\core\arg1\__init__.py", line 16, in <module>
raise RuntimeError(msg)
RuntimeError: Should not import this directly, used by pubsub.core if applicable
8006 WARNING: Hidden import "wx.lib.pubsub.core.publisher" not found!
8008 WARNING: Hidden import "wx.lib.pubsub.core.listenerimpl" not found!
8009 WARNING: Hidden import "wx.lib.pubsub.core.publishermixin" not found!
8009 WARNING: Hidden import "wx.lib.pubsub.core.datamsg" not found!
8009 WARNING: Hidden import "wx.lib.pubsub.core.topicargspecimpl" not found!
8009 WARNING: Hidden import "wx.lib.pubsub.core.topicmgrimpl" not found!
可执行文件已“成功”创建,但是当我启动它时,我收到以下错误:
Traceback (most recent call last):
File "upload_test_run_dynamic_clean.py", line 21, in <module>
from wx.lib.pubsub import pub
File "c:\python27\Lib\site-packages\PyInstaller\loader\pyimod03_importers.py", line 389, in load_module
exec(bytecode, module.__dict__)
File "site-packages\wx-3.0-msw\wx\lib\pubsub\pub.py", line 35, in <module>
File "c:\python27\Lib\site-packages\PyInstaller\loader\pyimod03_importers.py", line 389, in load_module
exec(bytecode, module.__dict__)
File "site-packages\wx-3.0-msw\wx\lib\pubsub\core\__init__.py", line 45, in <module>
ImportError: No module named publisher
我试图添加hookspath是spec文件(它已经存在于pyinstaller hooks文件夹中的wx.lib.pubsub的钩子)但它没有用,或者我做错了。
是否有导入wx和其他子模块的命令。 我的代码中有这个
import wx
import wx.lib.pubsub.setuparg1
from wx.lib.pubsub import pub
import wx.lib.agw.pybusyinfo as PBI
from wx.lib.scrolledpanel import ScrolledPanel
答案 0 :(得分:1)
8006 WARNING: Hidden import "wx.lib.pubsub.core.publisher" not found!
8008 WARNING: Hidden import "wx.lib.pubsub.core.listenerimpl" not found!
8009 WARNING: Hidden import "wx.lib.pubsub.core.publishermixin" not found!
8009 WARNING: Hidden import "wx.lib.pubsub.core.datamsg" not found!
8009 WARNING: Hidden import "wx.lib.pubsub.core.topicargspecimpl" not found!
8009 WARNING: Hidden import "wx.lib.pubsub.core.topicmgrimpl" not found!
核心中缺少这些模块,如果您错放了模块,请将它们移回原位。
答案 1 :(得分:1)
显然,这些模块的导入是在子文件夹kwargs中完成的,但实际上这些文件需要放在根文件夹中。
所以我只是从
复制了那些文件Lib\site-packages\wx-3.0-msw\wx\lib\pubsub\core\kwargs
到
Lib\site-packages\wx-3.0-msw\wx\lib\pubsub\core
现在它工作了!
答案 2 :(得分:1)
我遇到了同样的问题,在pyinstaller 3.4发布后仍然存在。当使用pyinstaller中的任何wx.lib.pubsub,PyPubSub或pypubsub时,这是一个已知问题。见https://github.com/pyinstaller/pyinstaller/issues/1530;显然,进口是以一种难以解决的方式处理的。 PyPubSub和pypubsub是相同代码库的分支,并且会遇到同样的问题。如果不想在每个版本中破解wx发行版的库,您的选项包括:
阻力最小的路径似乎是找到一个不同的pubsub库。我切换到了闪光灯,这对于小型项目来说是微不足道的。
另一个提示:请注意,对于pyinstaller,通常有一个版本组合是稳定的,而且每个平台的版本会有所不同。
答案 3 :(得分:0)
我最近遇到了这个问题,并且找到了另一个对我有用的解决方案。我将from wx.lib.pubsub import pub
替换为from pubsub import pub
。您可能需要执行pip install pypubsub
才能获得所需的软件包。您可以在这里找到更多信息:
https://github.com/schollii/pypubsub/issues/7