导入错误:无法导入名称 Publisher

10 投票
3 回答
13547 浏览
提问于 2025-04-16 14:06

我成功地用Py2exe和Pyinstaller创建了我应用程序的可执行版本(.exe文件)。但是,当我尝试从这个.exe文件运行应用时,日志文件里出现了以下错误:

追踪(最近的调用在最前面): 文件 "CreateAS.pyw",第8行,在 <模块> 中 导入错误:无法导入名称 Publisher

我在这个部分真的卡住了。你能帮帮我吗?

谢谢

3 个回答

2

我在学习一个使用 wx.lib.pubsub 的示例代码时,也遇到了这个问题。

要简单地解决这个问题,我只需要把这一行改成:

from wx.lib.pubsub import Publisher as pub

改成:

from wx.lib.pubsub import pub

虽然大家接受的答案里有一些链接,依然是正确的,但为了简单起见,我加上这个解决方案,因为大家接受的方案有点让人困惑。

5

可以试试这样做:

from wx.lib.pubsub import setuparg1
from wx.lib.pubsub import pub as Publisher

然后:把所有出现的Publisher()替换成Publisher.

15

我猜你正在使用的 wxPython 版本是 >= 2.8.11.0 吧?如果是的话,wx.lib.pubsub 这个包已经发生了变化。这个页面 详细说明了这些变化。此外,wxPython 的邮件列表上也有一个讨论这个问题的帖子,链接在 这里

为了让我的项目正常工作,我按照 这里 的描述做了调整,这也是上面邮件列表讨论的一部分。我在下面总结一下:

如果你能做到的话,最好的办法(也就是没有任何小技巧!)是使用和版本1相同的消息传递协议,但在最新的API中,这个叫做 "arg1":

# only in app's startup  module   
from wx.lib.pubsub import setuparg1   
# in all modules that use pubsub 
from wx.lib.pubsub import pub as Publisher

并且把所有出现的 "Publisher()." 替换成 "Publisher."

然后在我的 setup.py 脚本中,我需要在选项里添加以下内容:

options = {
    "py2exe": {"packages": ['wx.lib.pubsub']}
}
setup(data_files=data_files,
      windows=[
              {'script': 'btpos.py'],
               options=options)

现在你应该能够使用新的 pubsub 版本来构建一个可执行文件,但仍然使用旧的API。如果你的项目不太大,可能不需要做太多的更改就能顺利进行。

撰写回答