首页 > 解决方案 > Windows Pyinstaller ImportError:带有 PyQt5 的 DLL

问题描述

我只安装了一个版本的 Python。现在是 3.8。

where python
C:\Users\me\AppData\Local\Programs\Python\Python38\python.exe
C:\Users\me\AppData\Local\Microsoft\WindowsApps\python.exe

首先,我检查包含 PyQt5 的目录中的 dll 文件,并看到一个非常强大的 DLL 文件列表:

dir C:\Users\me\AppData\Local\Programs\Python\Python38\Lib\site-packages\PyQt5\Qt5\bin

 Directory of C:\Users\me\AppData\Local\Programs\Python\Python38\Lib\site-packages\PyQt5\Qt5\bin

2021-05-22  03:52 PM    <DIR>          .
2021-05-22  03:52 PM    <DIR>          ..
2021-05-20  12:58 AM           317,208 concrt140.dll
2021-05-20  12:58 AM         4,173,928 d3dcompiler_47.dll
2021-05-20  12:58 AM         3,205,632 libcrypto-1_1-x64.dll
2021-05-20  12:58 AM         1,988,608 libeay32.dll
2021-05-20  12:58 AM            25,072 libEGL.dll
2021-05-20  12:58 AM         3,385,328 libGLESv2.dll
2021-05-20  12:58 AM           681,472 libssl-1_1-x64.dll
2021-05-20  12:58 AM           590,112 msvcp140.dll
2021-05-20  12:58 AM            31,728 msvcp140_1.dll
2021-05-20  12:58 AM           193,520 msvcp140_2.dll
2021-05-20  12:58 AM        20,923,392 opengl32sw.dll
2021-05-22  03:52 PM            58,384 python3.dll
2021-05-20  12:58 AM           547,824 Qt5Bluetooth.dll
2021-05-20  12:58 AM         6,023,664 Qt5Core.dll
2021-05-20  12:58 AM           436,720 Qt5DBus.dll
2021-05-20  12:58 AM         4,487,152 Qt5Designer.dll
2021-05-20  12:58 AM         7,008,240 Qt5Gui.dll
2021-05-20  12:58 AM           428,528 Qt5Help.dll
2021-05-20  12:58 AM         1,645,552 Qt5Location.dll
2021-05-20  12:58 AM           746,480 Qt5Multimedia.dll
2021-05-20  12:58 AM           102,384 Qt5MultimediaWidgets.dll
2021-05-20  12:58 AM         1,340,400 Qt5Network.dll
2021-05-20  12:58 AM           138,224 Qt5Nfc.dll
2021-05-20  12:58 AM           321,008 Qt5OpenGL.dll
2021-05-20  12:58 AM           315,888 Qt5Positioning.dll
2021-05-20  12:58 AM           109,552 Qt5PositioningQuick.dll
2021-05-20  12:58 AM           317,424 Qt5PrintSupport.dll
2021-05-20  12:58 AM         3,591,664 Qt5Qml.dll
2021-05-20  12:58 AM           438,768 Qt5QmlModels.dll
2021-05-20  12:58 AM            57,328 Qt5QmlWorkerScript.dll
2021-05-20  12:58 AM         4,148,720 Qt5Quick.dll
2021-05-20  12:58 AM           517,616 Qt5Quick3D.dll
2021-05-20  12:58 AM           117,232 Qt5Quick3DAssetImport.dll
2021-05-20  12:58 AM           225,776 Qt5Quick3DRender.dll
2021-05-20  12:58 AM         1,244,144 Qt5Quick3DRuntimeRender.dll
2021-05-20  12:58 AM            46,064 Qt5Quick3DUtils.dll
2021-05-20  12:58 AM           173,552 Qt5QuickControls2.dll
2021-05-20  12:58 AM           478,704 Qt5QuickParticles.dll
2021-05-20  12:58 AM           215,536 Qt5QuickShapes.dll
2021-05-20  12:58 AM         1,113,584 Qt5QuickTemplates2.dll
2021-05-20  12:58 AM           120,816 Qt5QuickTest.dll
2021-05-20  12:58 AM            82,416 Qt5QuickWidgets.dll
2021-05-20  12:58 AM           477,680 Qt5RemoteObjects.dll
2021-05-20  12:58 AM           205,808 Qt5Sensors.dll
2021-05-20  12:58 AM            75,760 Qt5SerialPort.dll
2021-05-20  12:58 AM           208,880 Qt5Sql.dll
2021-05-20  12:58 AM           330,736 Qt5Svg.dll
2021-05-20  12:58 AM           245,232 Qt5Test.dll
2021-05-20  12:58 AM            49,648 Qt5TextToSpeech.dll
2021-05-20  12:58 AM           134,128 Qt5WebChannel.dll
2021-05-20  12:58 AM           149,488 Qt5WebSockets.dll
2021-05-20  12:58 AM            78,320 Qt5WebView.dll
2021-05-20  12:58 AM         5,498,352 Qt5Widgets.dll
2021-05-20  12:58 AM           237,040 Qt5WinExtras.dll
2021-05-20  12:58 AM           213,488 Qt5Xml.dll
2021-05-20  12:58 AM         2,643,440 Qt5XmlPatterns.dll
2021-05-20  12:58 AM           361,984 ssleay32.dll
2021-05-20  12:58 AM           101,872 vcruntime140.dll
2021-05-20  12:58 AM            44,528 vcruntime140_1.dll

我运行以下 pyinstaller 命令,其中包含这些 DLL 文件的路径:

pyinstaller --onefile --log-level=DEBUG --path C:\Users\me\AppData\Local\Programs\Python\Python38\Lib\site-packages\PyQt5\Qt5\bin --upx-exclude "vcruntime140.dll" --hidden-import "PyQt5" --hidden-import "QtWidgets" test.py 

这里是 Python 源代码test.py。在我开始工作之前,这只是一个基本的进口清单:

import PyQt5
import PyQt5.QtWidgets
import PyQt5.QtGui
import PyQt5.QtCore

当我运行时test.exe,它似乎完成了第一行import PyQt5但第二行import PyQt5.QtWidgets给出了以下错误:

test.exe
Traceback (most recent call last):
  File "test.py", line 9, in <module>
ImportError: DLL load failed while importing QtWidgets: The specified module could not be found.
[11136] Failed to execute script test

当我查看构建的调试输出时,似乎找到了 DLL 路径,因为调试中有如下行:

19179 DEBUG: Analyzing C:\Users\me\AppData\Local\Programs\Python\Python38\Lib\site-packages\PyQt5\Qt5\bin\Qt5QmlModels.dll
19236 DEBUG: Skipping KERNEL32.dll dependency of Qt5QmlModels.dll
19238 DEBUG: Analyzing C:\Users\me\AppData\Local\Programs\Python\Python38\Lib\site-packages\PyQt5\Qt5\bin\Qt5Qml.dll

几天来,我一直在围绕这个问题转圈。有时当我重新启动 Windows 时,编译后会出现另一个错误pyinstaller

ModuleNotFoundError: No module named 'PyQt5.QtWidgets'

这很奇怪,因为我可以从 python>>终端导入:

>>import PyQt5
>>import PyQt5.QtWidgets
>>

我已经尝试过关闭并打开 upx 的构建。
我如何才能成功构建它来导入 PyQt.QtWidgets?

标签: dllpyqt5pyinstallerpython-3.8

解决方案


推荐阅读