1

我正在尝试使用 pyinstaller 从我的 python 代码构建一个 exe。我正在使用的模块之一是 pubsub(真的是 pypubsub。它曾经是 wxpython 的一部分)。当我尝试运行 exe 时出现错误。它抱怨“ImportError:没有名为 listenerimpl 的模块”。

我看过一些关于让 wx.lib.pubsub 工作的文章(它与 pyinstaller 有已知问题)。我已经尝试过那些文章中提出的解决方案(稍作修改以说明它不再是 wx 的一部分)但没有运气。

我可以通过将正确的listenerimpl(kwargs one)的路径添加到我的spec文件中的分析文件列表中来克服最初的“ImportError:没有名为listenerimpl的模块”错误,但是我在导入“publisher”时遇到了进一步的错误. 通过在规范文件中添加其路径并不能修复该错误。

我认为解决方案不应该涉及在我的规范文件中添加 listenerimpl.py 的路径......但我不确定如何让这个工作愉快。

额外信息

  • 使用 pubsub 版本:3.1.1b1.201005.r243
  • 使用 pyinstaller 版本:2.0
  • 平台:win7
4

2 回答 2

2

pubsub 问题已解决(尽管 exe 仍未运行)。

因此,如果您查看此处的评论(尤其是 sebastian.hilbert 的评论 #15),它主要通过一些调整来解决问题。

必要的调整。

  1. 将挂钩文件上的名称更改为 hook-pubsub.core.py 和 hook-pubsub.setuparg1.py。
  2. 在这些文件的内部,您应该摆脱对 wx.
  3. 启用挂钩文件。您可以通过以下两种方式之一执行此操作。简单的方法是将这些新的钩子文件放到 'pyinstaller-2.0\PyInstaller\hooks' 中,这是 pyinstaller 默认查找钩子的地方。干净/好的方法是将这些钩子放入它们自己的文件夹中,并将该文件夹作为钩子路径添加到您的规范文件中。

注意:我不清楚如何添加钩子路径。在您的规范文件中,在对分析的调用中,有一个 hookspath 参数。它想要一个列表而不是字符串。所以你想做一些类似 hookspath=['path1', 'path2', etc] 的事情。

NB2:此外,如果您要求“path.dirname(path.abspath(__file__))”,您将获得 pyinstaller 的目录,而不是您的规范文件所在的位置。

于 2012-09-26T00:10:45.587 回答
0

对于像我这样迟到的人,有一个新的推荐程序。

  1. 我推荐使用OliverPyPubSub。对于 Python 2.7,使用他的 3.4.2 版本。确保您只使用此 PubSub。这意味着,如果您的 env/lib/site-packages 中有任何其他 PubSub——不包括与 wxPython 捆绑的那个——你会想要摆脱它们。他们会引起问题。

  2. 尽管您可能已经阅读过,但不要使用from pubsub import setupkwargs.

  3. 不要向 PyInstaller 添加任何新的钩子。他们已经把它覆盖了。

就是这样。你完成了。

运行 PyInstaller。检查构建中的任何错误。希望 PubSub 不会成为其中之一。

于 2019-06-11T18:53:22.380 回答