Should not import this directly, used by pubsub.core if applicable

问题:
在python应用程序中使用了pubsub,使用工具调试的运行一切正常,但是使用pyinstaller 将程序打包成exe文件后,出现如下错误。

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 
ImportError: No module named publisher

然后在查看pyinstaller工具将程序打包的过程中出现的日志文件发现有一个地方出现错误日志

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!

说没有找到pubsub相关的库文件,但是到库安装的目录下看,wx.lib.pubsub.core目录下确实没有这几个文件,这几个文件都在wx.lib.pubsub.core.kwargs/wx.lib.pubsub.core.arg1目录下。

当wxPython >= 2.8.11.0, 使用kwargs中目录的文件
其他版本使用arg1中的文件

解决方式
将kwargs中相关的文件拷贝到core目录下面,然后使用pyinstaller重新生成exe重新

参考资料:https://wiki.wxpython.org/WxLibPubSub

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值