3

我的 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 是规范文件(它在 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

4 回答 4

2
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!

这些模块在核心中丢失,如果您放错了模块,请将它们移回那里。

于 2016-11-23T18:15:33.497 回答
1

我最近遇到了这个问题,我找到了另一个对我有用的解决方案。我替换from wx.lib.pubsub import pubfrom pubsub import pub. 您可能需要做 apip install pypubsub才能获得所需的包裹。您可以在此处找到更多信息: https ://github.com/schollii/pypubsub/issues/7

于 2019-03-31T01:50:38.793 回答
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

现在它可以工作了!

于 2016-11-24T09:35:35.170 回答
1

我遇到了同样的问题,在 pyinstaller 3.4 发布后仍然存在。将 wx.lib.pubsub、PyPubSub 或 pypubsub 与 pyinstaller 一起使用时,这是一个已知问题。见https://github.com/pyinstaller/pyinstaller/issues/1530;显然,进口的处理方式很难解决。PyPubSub 和 pypubsub 是相同代码库的分支,并且会有相同的问题。如果不想在每个版本中破解 wx 发行版的库,您的选择包括:

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

阻力最小的路径似乎是找到不同的 pubsub 库。我切换到了blinker,这是最小的,适合小型项目。

另一个提示:请注意,使用 pyinstaller 通常有一个稳定的版本组合,并且每个平台都会有所不同。

于 2018-01-17T16:45:34.507 回答