py2exe PyQt5 "ImportError: No module named 'Qt'"
Posted
技术标签:
【中文标题】py2exe PyQt5 "ImportError: No module named \'Qt\'"【英文标题】:py2exe PyQt5 "ImportError: No module named 'Qt'"py2exe PyQt5 "ImportError: No module named 'Qt'" 【发布时间】:2015-05-19 19:41:06 【问题描述】:我正在尝试使用 py2exe (0.9.2.0) 将 python 脚本转换为可执行文件。
到目前为止我失败了,因为 py2exe 没有找到 Qt 模块:
C:\Users\Tobias\eclipse\workspace\pydevTest>python setup.py py2exe
running py2exe
5 missing Modules
------------------
? Qt imported from __SCRIPT__
? WizardPage imported from __SCRIPT__
? readline imported from cmd, code, pdb
? win32api imported from platform
? win32con imported from platform
Building 'dist\Test.exe'.
Building shared code archive 'dist\library.zip'.
Copy c:\windows\system32\python34.dll to dist
Copy C:\Python34\DLLs\_hashlib.pyd to dist\_hashlib.pyd
Copy C:\Python34\lib\site-packages\PyQt5\QtGui.pyd to dist\PyQt5.QtGui.pyd
Copy C:\Python34\lib\site-packages\PyQt5\QtCore.pyd to dist\PyQt5.QtCore.pyd
Copy C:\Python34\DLLs\unicodedata.pyd to dist\unicodedata.pyd
Copy C:\Python34\DLLs\_ssl.pyd to dist\_ssl.pyd
Copy C:\Python34\DLLs\_elementtree.pyd to dist\_elementtree.pyd
Copy C:\Python34\DLLs\select.pyd to dist\select.pyd
Copy C:\Python34\lib\site-packages\sip.pyd to dist\sip.pyd
Copy C:\Python34\lib\site-packages\PyQt5\QtWidgets.pyd to dist\PyQt5.QtWidgets.pyd
Copy C:\Python34\DLLs\pyexpat.pyd to dist\pyexpat.pyd
Copy C:\Python34\DLLs\_lzma.pyd to dist\_lzma.pyd
Copy C:\Python34\DLLs\_socket.pyd to dist\_socket.pyd
Copy C:\Python34\DLLs\_bz2.pyd to dist\_bz2.pyd
Copy C:\Python34\DLLs\_ctypes.pyd to dist\_ctypes.pyd
Copy DLL C:\Python34\lib\site-packages\PyQt5\Qt5Core.dll to dist\
Copy DLL C:\Python34\lib\site-packages\PyQt5\icudt53.dll to dist\
Copy DLL C:\Python34\lib\site-packages\PyQt5\icuuc53.dll to dist\
Copy DLL C:\Python34\lib\site-packages\PyQt5\icuin53.dll to dist\
Copy DLL C:\Python34\lib\site-packages\PyQt5\Qt5Gui.dll to dist\
Copy DLL C:\Python34\lib\site-packages\PyQt5\Qt5Widgets.dll to dist\
我的 setup.py 如下所示:
import py2exe
from distutils.core import setup
setup(windows=["./src/Test.py"], options="py2exe" : "includes" : ["sip", "PyQt5.QtGui","PyQt5.QtWidgets","PyQt5.QtCore","PyQt5.QtCore"])
脚本相当简单。摆脱第一个错误后,我可能还会帮助解决其他四个缺失的模块...
非常感谢!
【问题讨论】:
将 PyQt5._qt 添加到包含会导致编译错误。感谢您的提示,但在我的情况下似乎无法解决问题。 有时在 setup.py 中导入缺少的模块会有所帮助。如果你导入 PtQt5 会发生什么? 【参考方案1】:您需要添加以下dll:
C:\Windows\SYSTEM32\msvcp100.dll
C:\Windows\SYSTEM32\msvcr100.dll
C:\Python34\Lib\site-packages\PyQt4\plugins\platforms\qwindows.dll
类似这样的:
data_files = (
('', glob(r'C:\Windows\SYSTEM32\msvcp100.dll')),
('', glob(r'C:\Windows\SYSTEM32\msvcr100.dll')),
('platforms', glob(r'C:\Python34\Lib\site-packages\PyQt4\plugins\platforms\qwindows.dll')),
),
【讨论】:
感谢您的回答。-问题是非法进口。 Python 允许“从 Qt 导入 xxx”,但 py2exe 无法解决。将导入更改为“from PyQt5.Qt import xxx”,问题就解决了。但是您提到的两个 dll 也丢失了。所以谢谢你的提示!【参考方案2】:抱歉,之前的答案对我不起作用:https://***.com/a/37622355/7426109
(而且我有不同的版本)
另一方面,起作用的是将其添加到您的路径中:“C:\Program Files (x86)\Python38-32\Lib\site-packages\PyQt5\Qt\bin ”。
我的临时修复:
您将“Qt”(“C:\Program Files (x86)\Python38-32\Lib\site-packages\PyQt5\Qt”)文件夹复制到“dist”,然后使用在当前 CMD 窗口中将“.dist\Qt\bin”添加到 PATH 的批处理脚本。 (当然,这并不完美,但至少可以在另一台机器上执行)
信息
Windows 10 x64、Python 3.8.6 x32、PyQt5==5.15.1、py2exe==0.10.0.2
【讨论】:
以上是关于py2exe PyQt5 "ImportError: No module named 'Qt'"的主要内容,如果未能解决你的问题,请参考以下文章
在 PyQt5 中使用 cx_freeze,找不到 PyQt5