Python 3.x cx#U冻结:导入错误:没有名为';PyQt5.Qt';

Python 3.x cx#U冻结:导入错误:没有名为';PyQt5.Qt';,python-3.x,pyqt5,cx-freeze,Python 3.x,Pyqt5,Cx Freeze,我正在尝试使用cx\u Freeze构建GUI应用程序。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.envi

我正在尝试使用
cx\u Freeze
构建GUI应用程序。
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_冻结是通过以下错误实现的。我已经安装了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'
运行构建
运行build_exe
回溯(最近一次呼叫最后一次):
文件“setup.py”,第38行,在
选项=选项,可执行文件=exe)
文件“C:\Users\dm\AppData\Local\Programs\Python36\lib\site packages\cx\u Freeze\dist.py”,第349行,位于安装程序中
distutils.core.setup(**attrs)
文件“C:\Users\dm\AppData\Local\Programs\Python36\lib\distutils\core.py”,第148行,在安装程序中
dist.run_命令()
文件“C:\Users\dm\AppData\Local\Programs\Python36\lib\distutils\dist.py”,第955行,在run\u命令中
self.run_命令(cmd)
文件“C:\Users\dm\AppData\Local\Programs\Python36\lib\distutils\dist.py”,第974行,在run\u命令中
cmd_obj.run()
文件“C:\Users\dm\AppData\Local\Programs\Python36\lib\distutils\command\build.py”,第135行,正在运行
self.run_命令(cmd_名称)
文件“C:\Users\dm\AppData\Local\Programs\Python\36\lib\distutils\cmd.py”,第313行,在run\u命令中
self.distribution.run_命令(command)
文件“C:\Users\dm\AppData\Local\Programs\Python36\lib\distutils\dist.py”,第974行,在run\u命令中
cmd_obj.run()
文件“C:\Users\dm\AppData\Local\Programs\Python36\lib\site packages\cx\u Freeze\dist.py”,第219行,正在运行
冷冻室
文件“C:\Users\dm\AppData\Local\Programs\Python36\lib\site packages\cx\u Freeze\freezer.py”,第616行,处于冻结状态
self.finder=self.\u GetModuleFinder()
文件“C:\Users\dm\AppData\Local\Programs\Python\36\lib\site packages\cx\u Freeze\freezer.py”,第342行,位于_GetModuleFinder中
finder.IncludePackage(名称)
IncludePackage中的文件“C:\Users\dm\AppData\Local\Programs\Python36\lib\site packages\cx\u Freeze\finder.py”,第659行
模块=自身。\u导入模块(名称、延迟导入)
文件“C:\Users\dm\AppData\Local\Programs\Python\36\lib\site packages\cx\u Freeze\finder.py”,第351行,在导入模块中
引发导入错误(“没有名为%r”%name的模块)
ImportError:没有名为“PyQt5.Qt”的模块
有人能帮我找出到底出了什么问题吗?

试着删除(不必要的?)行

setup.py
脚本

OP删除此行后编辑:


  • 尝试删除不必要的
    os.environ
    语句,这些语句用于
    tkinter
    ,它们可能冲突。删除
    包含_文件中的3个DLL条目(仅保留图标)。将
    'atexit'
    添加到
    包含列表中,请参阅

  • 尝试重新安装
    PyQt5
    cx\u Freeze
    ,请参阅和中的潜在注意事项

  • 如果这仍然不起作用,则可能与应用程序中使用的另一个包存在冲突。要找到答案,请仅使用
    PyQt5
    制作一个最小的示例,例如,并尝试冻结它。如果可行,则逐个添加其他包,在每个步骤检查冻结的应用程序

  • 编辑二:

  • 另一种可能性是,如果您的系统上安装了或已经安装了
    PyQt4
    ,则与之发生冲突。确保从应用程序中删除任何导入的
    PyQt4
    ,并可能在
    setup.py
    脚本中的
    build_exe
    字典中添加一个条目
    excludes:['PyQt4']

  • 我知道这是一个老问题,但今天我面对这个问题

    我就是这样解决的:


    从我的
    setup.py
    (“{”build_exe):{“packages”中删除了PyQt5及其相关的所有内容:“不要大写PyQt5。请在setup.py文件中尝试PyQt5。

    您使用的是哪一版本的cx\u Freeze?@jpeg最新版本。cx\u Freeze 5.1.1但我猜您会收到不同的错误消息。我不知道为什么cx\u Freeze无法找到PyQt5。如果在python控制台中键入import PyQt5.Qt会发生什么情况?@M.Denis我已经添加了更多的建议。”o我的答案。从程序包列表中删除PyQt5会清除错误消息。但我在运行应用程序时遇到以下属性错误。错误为
    AttributeError:function'LLVMPY_OffsetOfElement not found
    import PyQt5.Qt