py2exe + pywin32 当 bundle_files=1 时 MemoryLoadLibrary 导入失败

6 投票
4 回答
3603 浏览
提问于 2025-04-16 02:04

我写了一个简单的程序,使用了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 个回答

0

你有没有试过 PyInstaller 呢?我在Windows 7和Ubuntu 10.04上都用过它,效果简直太神奇了,甚至在Windows上编译成.pyd文件也没问题。

我用它把我开发的各种应用程序都打包在一起了。

1

你确定问题是因为没有包含win32ui.pyd这个文件吗?错误信息的堆栈跟wiki上说的并不完全一样,不过你可以看看这个链接:http://www.py2exe.org/index.cgi/Py2exeAndWin32ui

1

到目前为止,最有效的解决办法就是用ctypes重新实现pywin32的功能。这样做不需要额外的.pyd或.dll文件,所以就避免了这个问题。

撰写回答