【问题标题】:Pyinstaller and import issue with wx.lib.pubsubwx.lib.pubsub 的 Pyinstaller 和导入问题
【发布时间】:2017-04-07 17:33:20
【问题描述】:

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

【问题讨论】:

    标签: python wxpython wxwidgets pyinstaller pypubsub


    【解决方案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!
    

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

    【讨论】:

      【解决方案2】:

      显然这些模块的导入是在子文件夹 kwargs 中完成的,但这些文件实际上需要放在根文件夹中。

      所以我只是从

      复制了这些文件
      Lib\site-packages\wx-3.0-msw\wx\lib\pubsub\core\kwargs
      

      到

      Lib\site-packages\wx-3.0-msw\wx\lib\pubsub\core
      

      现在它可以工作了!

      【讨论】:

        【解决方案3】:

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

        【讨论】:

        • 这是否适用于 PyPubSub 4.0.3、pyinstaller 3.4 和 python 3?编译后我一直无法加载 PyPubSub 或 pypubsub。
        【解决方案4】:

        我遇到了同样的问题,在 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 通常有一个稳定的版本组合,并且每个平台都会有所不同。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2021-06-25
          • 2021-11-07
          • 1970-01-01
          • 1970-01-01
          • 2022-01-25
          • 1970-01-01
          • 2019-04-06
          • 1970-01-01
          相关资源
          最近更新 更多