Исполняемый файл, созданный с помощью cx_freeze в Windows 7, вылетает с ошибками о PyQt5 при запуске на других компьютерах

Исполняемый файл отлично работает в системе, в которой я его создал, но вылетает со следующими ошибками в других системах, которые я пробовал...

Traceback(most recent call last):
File "C:\Python34\lib\site-packages\cx_freeze-4.3.3-py3.4-win32.egg\cx_freeze\initscripts\Console.py", line 27, in <module>
File "monitor edi.py", line 1, in <module>
File "C:\Python34\lib\importlib\_bootstrap.py", line 2214, in find and load
File "C:\Python34\lib\importlib\_bootstrap.py", line 2203, in find and load_unlocked
File "C:\Python34\lib\importlib\_bootstrap.py", line ll91, in load unlocked
File "C:\Python34\lib\importlib\_bootstrap. py", line l l 6 l , in _load_backward_compatible
File "C:\Apps\cars\Code\cars utils.py", line 7, in <module>
File "C:\Python34\lib\importlib\_bootstrap.py", line 2261, in handle fromlist
File "C:\Python34\lib\importlib\_bootstrap.py", line 321, in call with frames_removed
File "C:\Python34\lib\importlib\_bootstrap.py", line 2214, in find and load
File "C:\Python34\lib\importlib\_bootstrap.py", line 2203, in find and load_unlocked
File "C:\Python34\lib\importlib\_bootstrap.py", line ll91, in load unlocked
File "C:\Python34\lib\importlib\_bootstrap.py", line ll61, in load_backward_compatible
File "ExtensionLoader_PyQt5_QtCore.py", line 22, in <module>
File "ExtensionLoader_PyQt5_QtCore.py", line 14, in  __bootstrap__
ImportError: DLL load failed: The specified module could not be found.

Я читал о некоторых проблемах с отсутствующими DLL, таких как QWindows.DLL и libEGL.dll, однако похоже, что cx_Freeze-4.3.3 устранил эти проблемы, поскольку эти DLL включены в папку сборки.

Построен на 32-битном Python 3.4 с PyQt 5.3 и cx_Freeze 4.3.3.

Вот список файлов в папке сборки

icudt49.dll
icuin49.dll
icuuc49.dll
libEGL.dll
libGLESv2.dll
library.zip
monitor_edi.exe
msvcr100.dll
pyexpat.pyd
pyodbc.pyd
PyQt5.QtCore.pyd
PyQt5.QtGui.pyd
PyQt5.QtWidgets.pyd
python34.dll
pywintypes34.dll
Qt5Core.dll
Qt5Gui.dll
Qt5Widgets.dll
qwindows.dll
select.pyd
sip.pyd
tcl86t.dll
tk86t.dll
unicodedata.pyd
win32api.pyd
win32crypt.pyd
_bz2.pyd
_ctypes.pyd
_decimal.pyd
_hashlib.pyd
_lzma.pyd
_socket.pyd
_ssl.pyd
_tkinter.pyd

Есть мысли/предложения/вопросы?


person Threk    schedule 10.06.2014    source источник
comment
Попробуйте использовать listdlls в разблокированной программе, чтобы увидеть, какие библиотеки Qt не т включено.   -  person Eryk Sun    schedule 10.06.2014
comment
Здесь также может пригодиться обходчик зависимостей.   -  person Thomas K    schedule 10.06.2014
comment
Я попробовал Dependency Walker, в котором упоминалась python3.dll. Однако добавление этой dll вообще не изменило сообщение об ошибке. Вывод обходчика зависимостей включал это сообщение ****LoadLibraryExW(g:\share\exe.win32-3.4\PyQt5.QtCore.pyd, 0x00000000, LOAD_WITH_ALTERED_SEARCH_PATH) вернул NULL. Ошибка: указанный модуль не найден (126). **** Это правильный путь к PyQt5.QtCore.pyd   -  person Threk    schedule 11.06.2014


Ответы (2)


Вам нужно убедиться, что cx_Freeze включает модуль atexit. Я не совсем понимаю, почему это так, но cx_Freeze PyQt пример включает это. Если вы используете сценарий cxfreeze, вы можете убедиться, что это происходит с опцией --include=atexit. Если вы вызываете cx_Freeze из своего собственного сценария setup.py, это может выглядеть примерно так, как этот код, адаптированный из моей собственной незавершенной работы:

import sys
from cx_Freeze import setup, Executable

base = None
if sys.platform == 'win32':
    base = 'Win32GUI'

setup(name = 'spamandeggs',
      version = '0.0.1',
      executables = [Executable('spamandeggs.pyw', base=base)],
      options = {'build_exe': {'includes': ['atexit']}})

Между прочим, если вы используете плагин PyQt5.Qsci, вам также нужно явно включить PyQt5.QtPrintSupport. И я обнаружил, что мне все еще нужно скопировать libEGL.dll после того, как cx_Freeze сделал свое дело, но я также использую cx_Freeze 4.3.3, поэтому я не уверен, почему это так.

person lunasspecto    schedule 14.06.2014

Сегодня я получил ту же ошибку и, наконец, нашел решение после целого дня поиска. Скопировал msvcp100.dll, все работает.

ВФТ

person mugedy    schedule 04.05.2015