导入错误:无法导入名称 Publisher
我成功地用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。如果你的项目不太大,可能不需要做太多的更改就能顺利进行。