将PyQwt与py2exe打包
我有一个标准的设置脚本,用来把基于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
这里有一些建议:
- 可以试着调整一下py2exe中的
bundle_files选项
(有3、2、1这几种选择),特别是如果你把所有文件放在一个大的库压缩包里,有些dll文件可能会不喜欢这样。 - 确保在windows\system32文件夹下或者你的可执行文件所在的目录里有一个
msvcp71.dll
的副本。 - 可以尝试明确排除这个dll文件(把Qwt.pyd添加到
dll_excludes
选项中,然后在构建后把Qwt.pyd(如果有的话,还要包括_Qwt.pyd)复制到你的可执行文件路径下)。
4
py2exe并不是制作Python应用程序exe文件的唯一方法,也可能不是最好的选择,特别是它几乎不支持pyqt。请你务必看看PyInstaller,它对PyQt是有支持的(而且对Linux和Mac也有支持,如果你需要的话……)——只要确保你使用的是SVN的最新版本,而不是“发布”的版本,因为后者现在严重过时了(这个问题希望很快就能解决……)。