cx_Freeze: ImportError: нет модуля с именем 'PyQt5.Qt' - PullRequest
2 голосов
/ 12 марта 2019

Я пытаюсь создать приложение с графическим интерфейсом, используя cx_Freeze. setup.py выглядит следующим образом:

from cx_Freeze import setup, Executable
import os
import sys

base = None

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

exe = [Executable("main.py", base=base, icon='window_icon_XbH_icon.ico')]

os.environ['TCL_LIBRARY'] = r'C:\\Users\\dm\\AppData\\Local\\Programs\\Python\\Python36\\tcl\\tcl8.6'
os.environ['TK_LIBRARY'] = r'C:\\Users\\dm\\AppData\\Local\\Programs\\Python\\Python36\\tcl\\tk8.6'

options = {
'build_exe': {
    'includes': ['scipy.io', 'scipy.spatial.ckdtree'],

    'include_files': [r'C:\\Users\\dm\\AppData\\Local\\Programs\\Python\\Python36\\DLLs\\tcl86t.dll', r'C:\\Users\\dm\\AppData\\Local\\Programs\\Python\\Python36\\DLLs\\tk86t.dll',
                      r'C:\\Users\\dm\\AppData\\Local\\Programs\\Python\\Python36\\Lib\\site-packages\\pyqt5_tools\\platforms\\qwindows.dll', 'window_icon_XbH_icon.ico'],
    'packages': ['pkg_resources._vendor', 'pandas', 'numpy', 'scipy', 'pydub', 'PyQt5', 'soundfile', 'sounddevice', 'cffi'],
}
}

setup(name="app", version="1.0", description='To be added',
  options=options, executables=exe)

При сборке cx_Freeze вызывает следующую ошибку. Я установил PyQt5.

running build
running build_exe
Traceback (most recent call last):
  File "setup.py", line 38, in <module>
options=options, executables=exe)
  File "C:\Users\dm\AppData\Local\Programs\Python\Python36\lib\site-packages\cx_Freeze\dist.py", line 349, in setup
distutils.core.setup(**attrs)
  File "C:\Users\dm\AppData\Local\Programs\Python\Python36\lib\distutils\core.py", line 148, in setup
dist.run_commands()
  File "C:\Users\dm\AppData\Local\Programs\Python\Python36\lib\distutils\dist.py", line 955, in run_commands
self.run_command(cmd)
  File "C:\Users\dm\AppData\Local\Programs\Python\Python36\lib\distutils\dist.py", line 974, in run_command
cmd_obj.run()
  File "C:\Users\dm\AppData\Local\Programs\Python\Python36\lib\distutils\command\build.py", line 135, in run
self.run_command(cmd_name)
  File "C:\Users\dm\AppData\Local\Programs\Python\Python36\lib\distutils\cmd.py", line 313, in run_command
self.distribution.run_command(command)
  File "C:\Users\dm\AppData\Local\Programs\Python\Python36\lib\distutils\dist.py", line 974, in run_command
cmd_obj.run()
  File "C:\Users\dm\AppData\Local\Programs\Python\Python36\lib\site-packages\cx_Freeze\dist.py", line 219, in run
freezer.Freeze()
  File "C:\Users\dm\AppData\Local\Programs\Python\Python36\lib\site-packages\cx_Freeze\freezer.py", line 616, in Freeze
self.finder = self._GetModuleFinder()
  File "C:\Users\dm\AppData\Local\Programs\Python\Python36\lib\site-packages\cx_Freeze\freezer.py", line 342, in _GetModuleFinder
finder.IncludePackage(name)
  File "C:\Users\dm\AppData\Local\Programs\Python\Python36\lib\site-packages\cx_Freeze\finder.py", line 659, in IncludePackage
module = self._ImportModule(name, deferredImports)
  File "C:\Users\dm\AppData\Local\Programs\Python\Python36\lib\site-packages\cx_Freeze\finder.py", line 351, in _ImportModule
raise ImportError("No module named %r" % name)
ImportError: No module named 'PyQt5.Qt'

Может ли кто-нибудь помочь мне понять, что на самом деле идет не так?

Ответы [ 2 ]

0 голосов
/ 21 июля 2019

Я знаю, что это старый вопрос, но сегодня я столкнулся с этой проблемой.

Вот как я решил ее:

Удален PyQt5 и все, что с ним связано, из моего setup.py ('{"build_exe": {"packages":' <- this part). После того, как он скомпилирован мой exe.Если вы запустите exe и обнаружите отсутствующую ошибку модуля PyQt5, то из каталога ваших пакетов сайта (path similar to this: d:\Python37\Lib\site-packages\PyQt5\) скопируйте весь каталог PyQt5 в ваш каталог cx_freeze lib (example: ..\build\exe.win-amd64-3.7\lib\)

Теперь попробуйте запустить exe ине должно быть ошибки отсутствующего модуля, по крайней мере, связанной с PyQt5.Если у вас есть какая-либо другая проблема с отсутствующим модулем, просто скопируйте ее из ваших пакетов сайта в каталог lib.Надеюсь, это поможет.

0 голосов
/ 12 марта 2019

Попробуйте удалить (ненужную?) Строку

import PyQt5.Qt

из сценария setup.py.

РЕДАКТИРОВАТЬ после того, как OP удалила эту строку:

  1. Попробуйте удалить ненужные операторы os.environ, они для tkinter, возможно, они конфликтуют.Удалите 3 записи DLL в include_files (оставьте только значок).Добавьте 'atexit' в список includes, см. Пример cx_Freeze PyQt5 .

  2. Попробуйте переустановить PyQt5 и cx_Freeze, увидеть потенциалпредостережения в ImportError: Ни один модуль с именем PytQt5 и PyQt5 и модуль QtGui не найден .

  3. Если это все еще не работает, возможно, естьконфликт с другим пакетом, используемым в вашем приложении.Чтобы выяснить это, сделайте минимальный пример, используя только PyQt5, например cx_Freeze PyQt5 пример , и попытайтесь заморозить его.Если это работает, добавьте другие пакеты один за другим, проверяя замороженное приложение на каждом шаге.

РЕДАКТИРОВАТЬ II:

Еще одна возможность - конфликт с PyQt4, если он установлен или установлен в вашей системе.Обязательно удалите из приложения любой импорт PyQt4 и, возможно, добавьте запись excludes: ['PyQt4'] в словарь build_exe в своем скрипте setup.py.
...