将PyQwt与py2exe打包

2 投票
2 回答
1507 浏览
提问于 2025-04-15 11:47

我有一个标准的设置脚本,用来把基于PyQt的应用程序打包成Windows的.exe文件。

今天我尝试了一个简单的脚本,里面用到了PyQwt模块,但似乎不太好使。py2exe运行得没问题,但当我执行它生成的.exe文件时,它会把以下内容写入一个日志文件,并且不运行:

Traceback (most recent call last):
  File "qwt_test.pyw", line 5, in <module>
  File "zipextimporter.pyo", line 82, in load_module
  File "PyQt4\Qwt5\__init__.pyo", line 32, in <module>
  File "zipextimporter.pyo", line 98, in load_module
ImportError: MemoryLoadLibrary failed loading PyQt4\Qwt5\Qwt.pyd

当我查看build\bdist.win32\winexe\collect-2.5目录下的PyQt4\Qwt5\时,发现Qwt.pyd确实在那儿。

我在网上找不到关于这个错误的有用信息。这可能是什么原因呢?谢谢。

2 个回答

1

这里有一些建议:

  1. 可以试着调整一下py2exe中的bundle_files选项(有3、2、1这几种选择),特别是如果你把所有文件放在一个大的库压缩包里,有些dll文件可能会不喜欢这样。
  2. 确保在windows\system32文件夹下或者你的可执行文件所在的目录里有一个msvcp71.dll的副本。
  3. 可以尝试明确排除这个dll文件(把Qwt.pyd添加到dll_excludes选项中,然后在构建后把Qwt.pyd(如果有的话,还要包括_Qwt.pyd)复制到你的可执行文件路径下)。
4

py2exe并不是制作Python应用程序exe文件的唯一方法,也可能不是最好的选择,特别是它几乎不支持pyqt。请你务必看看PyInstaller,它对PyQt是有支持的(而且对Linux和Mac也有支持,如果你需要的话……)——只要确保你使用的是SVN的最新版本,而不是“发布”的版本,因为后者现在严重过时了(这个问题希望很快就能解决……)。

撰写回答