wx.lib.pubsub 的 Pyinstaller 和导入问题
Pyinstaller and import issue with wx.lib.pubsub
我的 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!
可执行文件已 "successfully" 创建,但当我启动它时出现以下错误:
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
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!
核心中缺少这些模块,如果您放错了模块,请将它们移回那里。
显然这些模块的导入是在子文件夹 kwargs 中完成的,但这些文件实际上需要放在根文件夹中。
所以我刚刚从
复制了这些文件
Lib\site-packages\wx-3.0-msw\wx\lib\pubsub\core\kwargs
至
Lib\site-packages\wx-3.0-msw\wx\lib\pubsub\core
现在成功了!
我运行遇到了同样的问题,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,通常有一个稳定的版本组合,这因平台而异。
我最近 运行 遇到了这个问题,我找到了另一个适合我的解决方案。我用 from pubsub import pub
替换了 from wx.lib.pubsub import pub
。您可能已经执行 pip install pypubsub
以获得所需的包。您可以在这里找到更多信息:
https://github.com/schollii/pypubsub/issues/7
我的 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!
可执行文件已 "successfully" 创建,但当我启动它时出现以下错误:
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
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!
核心中缺少这些模块,如果您放错了模块,请将它们移回那里。
显然这些模块的导入是在子文件夹 kwargs 中完成的,但这些文件实际上需要放在根文件夹中。
所以我刚刚从
复制了这些文件Lib\site-packages\wx-3.0-msw\wx\lib\pubsub\core\kwargs
至
Lib\site-packages\wx-3.0-msw\wx\lib\pubsub\core
现在成功了!
我运行遇到了同样的问题,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,通常有一个稳定的版本组合,这因平台而异。
我最近 运行 遇到了这个问题,我找到了另一个适合我的解决方案。我用 from pubsub import pub
替换了 from wx.lib.pubsub import pub
。您可能已经执行 pip install pypubsub
以获得所需的包。您可以在这里找到更多信息:
https://github.com/schollii/pypubsub/issues/7