6

我创建了一个使用 pywin32 的简单程序。我想将它部署为可执行文件,所以我 py2exe 了它。我也不想要大量的文件,所以我设置bundle_files为 1(意味着将所有内容捆绑在一起)。但是,当我尝试运行它时,我得到:

Traceback (most recent call last):
  File "pshelper.py", line 4, in <module>
  File "zipextimporter.pyc", line 82, in load_module
  File "win32.pyc", line 8, in <module>
  File "zipextimporter.pyc", line 98, in load_module
ImportError: MemoryLoadLibrary failed loading win32ui.pyd

在我的设置脚本中,我尝试做packages=["win32ui"]includes=["win32ui"]作为选项,但这没有帮助。如何让 py2exe 包含 win32ui.pyd?

如果我不要求它捆绑文件,我就没有这个问题,所以我现在可以这样做,但我想知道如何让它正常工作。

4

4 回答 4

1

您确定问题是没有包含 win32ui.pyd 吗?堆栈跟踪与 wiki 中记录的不完全相同,但请查看: http: //www.py2exe.org/index.cgi/Py2exeAndWin32ui

于 2010-07-30T14:42:47.267 回答
1

到目前为止效果最好的解决方法是使用 ctypes 简单地重新实现 pywin32 函数。这不需要另一个 .pyd 或 .dll 文件,因此可以避免该问题。

于 2013-11-09T01:24:18.657 回答
0

介意试用PyInstaller吗?我在 Windows 7 和 Ubuntu 10.04 上都使用过它,它就像魔术一样工作,即使我在 Windows 上编译为 .pyd 也是如此。

我已经能够捆绑我用它开发的各种应用程序。

于 2013-11-13T09:29:54.857 回答
-1

我在尝试将 psutil 与 py2exe 捆绑时遇到了同样的问题。这是我到目前为止发现的。

Traceback (most recent call last):
  File "wx_gui.py", line 43, in <module>
  File "zipextimporter.pyc", line 82, in load_module
  File "psutil\__init__.pyc", line 85, in <module>
  File "zipextimporter.pyc", line 82, in load_module
  File "psutil\_psmswindows.pyc", line 15, in <module>
  File "zipextimporter.pyc", line 98, in load_module
ImportError: MemoryLoadLibrary failed loading _psutil_mswindows.pyd

当 bundle_files = 3 时,我得到了这个回溯。 zipfile 可能已指定或可能为无,我仍然遇到问题。

首先,我认为这是一个缺少的 dll,因为这个页面: http: //www.py2exe.org/index.cgi/ProblemsToBeFixed

我已将在 Python27 中找到的所有 dll 复制到与可执行文件相同的目录中,并将该目录路径添加到 os.environ['path']。那没有用。

然后我尝试直接从站点包导入我的包。

我已经用我的正常 sys.path 替换了我编译的可执行文件的整个 sys.path

sys.path = [r'C:\Python27\Lib\idlelib', ...]

我认为 .pyd 模块已导入,但 Visual c++ 向我抛出了这个非常丑陋的错误消息:

Runtime Error!
Program: {path}.exe
This application has requested the Runtime to terminate it in an unusual way.
Please contact the application's support team for more information.

我建议您尝试替换整个 sys.path 以查看它是否正常工作。如果是这样,您总是可以让您的单个可执行文件将必要的模块写入临时目录并将其添加到您的路径中。如果没有,我觉得这个问题将很难解决。

于 2013-11-15T03:12:23.613 回答