问题
I have a standard setup script for py2exe with which I bundle PyQt-based applications into Windows .exe files.
Today I tried a simple script that uses the PyQwt module, and it doesn't seem to work. py2exe runs alright, but when I execute the .exe it creates, it dumps the following into a log file and doesn't run:
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
When I look in PyQt4\Qwt5\
in the build\bdist.win32\winexe\collect-2.5
directory, Qwt.pyd
is definitely there.
I can't seem to find anything useful online regarding this error. What could cause it? Thanks.
回答1:
py2exe is not the only way, and maybe not the best way, to put together exe files for Python apps -- in particular, it hardly if at all supports pyqt. Please, I beseech you, check out PyInstaller, which DOES know about PyQt (and Linux, and Mac, should you care...) -- just make sure you use the SVN head checkout, not the "released" version, which at this time is seriously out of date (an issue that's hopefully going away soon...).
回答2:
Some options:
- Try playing with the py2xe
bundle_files options
(3, 2, 1) (especially if you put them all in one big library zip, some dlls don't like that). - Make sure a copy of
msvcp71.dll
exists under windows\system32 or in the directory of your executable. - Try excluding the dll explicitely (add Qwt.pyd to the
dll_excludes
option and (after building) copy Qwt.pyd (and _Qwt.pyd if it exists) to your executable path.
来源:https://stackoverflow.com/questions/899658/bundling-pyqwt-with-py2exe