Wx.lib.pubsub

时间:2016-11-23 16:00:12

标签: python wxpython wxwidgets pyinstaller pypubsub

我的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

4 个答案:

答案 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发行版的库,您的选项包括:

  • 切换到PyDispatcher,blinker或其他更简单的pubsub库
  • 修改PyPubSub,使其以与pyinstaller兼容的方式加载模块,并将PR提交回项目

阻力最小的路径似乎是找到一个不同的pubsub库。我切换到了闪光灯,这对于小型项目来说是微不足道的。

另一个提示:请注意,对于pyinstaller,通常有一个版本组合是稳定的,而且每个平台的版本会有所不同。

答案 3 :(得分:0)

我最近遇到了这个问题,并且找到了另一个对我有用的解决方案。我将from wx.lib.pubsub import pub替换为from pubsub import pub。您可能需要执行pip install pypubsub才能获得所需的软件包。您可以在这里找到更多信息: https://github.com/schollii/pypubsub/issues/7