如何修复 "DLL load failed while importing QtWidgets"?

How to fix "DLL load failed while importing QtWidgets"?

问题:

所以,编译后,在dist文件夹中,有“PyQt5.Qt.pyd”文件, 但我收到此错误:

Traceback (most recent call last):
  File "main.py", line 102, in <module>
  File "<frozen zipimport>", line 259, in load_module
  File "<loader>", line 10, in <module>
  File "<loader>", line 8, in __load
ImportError: (DLL load failed while importing QtWidgets: The specified module could not be found.) 'Z:\Project\dist\PyQt5.QtWidgets.pyd'

我很确定 "Qt" 文件夹来自 "C:\Program Files (x86)\Python38-32\Lib\site-packages\PyQt5\Qt",编译后转换为 "PyQt5.Qt.pyd" 文件,我猜是造成此错误的原因。因为当我将此位置添加到我的 Windows PATH: "C:\Program Files (x86)\Python38-32\Lib\site-packages\PyQt5\Qt\bin" 时,编译后的程序可以完美运行。


我的临时修复是:

我将“Qt”文件夹复制到“dist”,并制作了一个将“.\dist\Qt\bin”添加到PATH的批处理脚本,对于当前的CMD window ...就这样我现在可以将它发送给我的客户进行测试...但这离最终解决方案还很远...该怎么办?

(我也试过只将“bin”或“platform\qwindows.dll”从“Qt”复制到 dist,但没有成功...)

对于这方面的任何帮助或建议,我将不胜感激。提前致谢!


我的信息:

OS 信息: Windows10 x64,Python3.8.6 x32

点冻结:

altgraph==0.17
cachetools==4.1.1
fbs==0.9.0
future==0.18.2
macholib==1.14
pefile==2019.4.18
Pillow==8.0.1
 py2exe==0.10.0.2
PyInstaller==3.4
 PyQt5==5.15.1
PyQt5-sip==12.8.1
pywin32==228
pywin32-ctypes==0.2.0
six==1.15.0

py2exe setup.py:

from distutils.core import setup
import py2exe
setup(windows=[{"script":"main.py"}], options={"py2exe":{"includes":["PyQt5.Qt","PyQt5.sip","PyQt5.QtWidgets","PyQt5.QtCore", "PyQt5.QtGui"]}})

将所有 dll 从 PyQt5\Qt\bin 复制到 dist,除了以 Qt5* 开头的那些(如果您不使用 direct3d 或 opengl,您可能不需要 d3dcompiler_47、libEGL、libGLESv2 和 opengl32sw)

我建议您尝试 运行 在新安装的 windows(可能在虚拟机中)上用 py2exe 转换您的应用程序,看看它是否有其他依赖项。

更新: 实际上,我只需要为 Visual Studio 2015、2017 和 2019 安装 Microsoft Visual C++ Redistributable,无需复制任何 dll 文件。 https://support.microsoft.com/en-us/topic/the-latest-supported-visual-c-downloads-2647da03-1eea-4433-9aff-95f26a218cc0