Объединение PyQwt с py2exe
Вопрос
У меня есть стандартный сценарий установки для 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
Когда я заглядываю в PyQt4\Qwt5\
в build\bdist.win32\winexe\collect-2.5
каталог, Qwt.pyd
определенно есть.
Кажется, я не могу найти ничего полезного в Интернете относительно этой ошибки.Что могло бы стать причиной этого?Спасибо.
Решение
py2exe - не единственный и, возможно, не лучший способ объединить exe-файлы для приложений Python - в частности, он вряд ли, если вообще поддерживает pyqt.Пожалуйста, я умоляю вас, проверьте PyInstaller, который знает о PyQt (и Linux, и Mac, если вас это волнует ...) - просто убедитесь, что вы используете SVN head checkout, а не "выпущенную" версию, которая на данный момент серьезно устарела (проблема, которая, надеюсь, скоро исчезнет ...).
Другие советы
Некоторые варианты:
- Попробуйте поиграть с py2xe
bundle_files options
(3, 2, 1) (особенно если вы помещаете их все в одну большую библиотеку zip, некоторым dll это не нравится). - Убедитесь, что копия
msvcp71.dll
существует в Windows\ system32 или в каталоге вашего исполняемого файла. - Попробуйте явно исключить dll (добавьте Qwt.pyd в
dll_excludes
выберите и (после сборки) скопируйте Qwt.pyd (и _Qwt.pyd, если он существует) в ваш исполняемый путь.