如何修复 "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
问题:
所以,编译后,在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