【问题标题】:ImportError: cannot import name PublisherImportError:无法导入名称发布者
【发布时间】:2011-07-19 11:15:08
【问题描述】:

我成功创建了我的应用程序的可执行版本(Py2exe、Pyinstaller)。当我尝试从 .exe 运行应用程序时,我在日志文件中收到如下错误:

Traceback (most recent call last): File "CreateAS.pyw", line 8, in <module> ImportError: cannot import name Publisher

我真的被困在这部分了。你能帮帮我吗?

谢谢

【问题讨论】:

  • 当没有找到某个部分时会引发NoSectionError 异常。您是否确认您确实有一个名为 locations 的部分?
  • 我通过将纸浆相关代码集成到我的主 .pyw 模块中解决了这个问题。所以现在只有一个python模块。但是这次我得到了一个如上所述的新错误。
  • 请描述您是如何从CreateAS.pyw 导入Publisher 的,Publisher 的位置及其用途。

标签: python executable py2exe


【解决方案1】:

我猜您使用的是wxPython 的版本,即&gt;= 2.8.11.0?如果是这样,wx.lib.pubsub 包已更改。 This page 描述了这些变化。在wxPython 邮件列表here 上也有一个线程讨论了这个问题。

为了使这一切在我的项目中发挥作用,我做了以下描述的here,这是上述邮件列表线程的一部分。我总结如下:

更可取的选择(即没有 hacks!)如果你能破解它(对不起!) 是使用相同的消息传递协议 作为 v1,但在最新的 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()." by "Publisher."

然后在我的setup.py 脚本中,我必须将以下内容添加到选项中:

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

您现在应该能够使用新版本的 pubsub 构建可执行文件,但使用旧的 api。您可能还想查看 pubsub 的新 v3 api。如果你的项目不是太大,你可能不需要做太多改变就可以过关。

【讨论】:

  • 在 setuparg1 之后导入 Publisher 不起作用,而在 setupv1 中尝试它可以。但是,在这两种情况下,编译时我仍然得到 ImportError。
【解决方案2】:

我正在使用一个使用 wx.lib.pubsub 的示例代码来研究并遇到了这个问题。

为了简单地解决这个问题,我只是换了一行:

from wx.lib.pubsub import Publisher as pub

收件人:

from wx.lib.pubsub import pub

接受的答案具有仍然正确的链接,但为简单起见,我添加了此解决方案,因为接受的解决方案有点令人困惑。

【讨论】:

  • 这是让旧程序快速运行的最短途径!
【解决方案3】:

试试这样:

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

然后:替换任何出现的Publisher()byPublisher.

【讨论】:

  • 这个答案在接受的答案上没有提供任何新的东西,这也是一个三年多的问题。
猜你喜欢
  • 2018-01-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-03-31
  • 2014-10-10
  • 2014-09-20
  • 2014-08-28
  • 2014-06-10
相关资源
最近更新 更多