PyInstaller4.3打包成功4.4报PyQt5无__version__属性如何解决
PyInstaller 4.4 版本 PyQt5 属性缺失报错解决方案
报错信息:AttributeError: Module 'PyQt5' has no attribute 'version'
该问题是PyInstaller 4.4版本的已知兼容性缺陷:4.4版本新增了PyQt5版本检测逻辑,会直接读取PyQt5.__version__顶层属性,但通过conda、自定义编译、精简安装包等渠道安装的PyQt5默认不会暴露该顶层属性,而4.3及更早版本没有这项检测逻辑,因此打包正常。
以下是三种可行的解决方案,可根据自身场景选择:
方案1:入口脚本注入属性(无需修改依赖,推荐优先使用)
在项目入口脚本的最顶部,所有其他导入语句之前添加以下代码,提前补全缺失的属性:
import PyQt5 if not hasattr(PyQt5, '__version__'): from PyQt5.QtCore import PYQT_VERSION_STR PyQt5.__version__ = PYQT_VERSION_STR
该方案不影响原有业务逻辑,也兼容所有PyQt5和PyInstaller版本。
方案2:修改PyInstaller对应Hook文件(无需修改业务代码)
找到PyInstaller安装路径下的钩子文件:hooks/hook-PyQt5.py,将文件内读取PyQt5.__version__的代码段替换为从QtCore模块读取版本的逻辑:
替换前的代码:
version = PyQt5.__version__
替换后的代码:
from PyQt5.QtCore import PYQT_VERSION_STR version = PYQT_VERSION_STR
方案3:升级PyInstaller到4.5及以上版本
该缺陷已经在PyInstaller 4.5及之后的版本被官方修复,官方调整了PyQt系列库的版本检测逻辑,不再直接读取顶层__version__属性。如果你的场景允许升级PyInstaller到更高版本,直接执行升级命令即可:
pip install --upgrade pyinstaller
验证方式
修改完成后重新执行原有打包命令,确认不再抛出该属性错误,打包完成后运行生成的程序文件验证功能正常即可。
内容的提问来源于stack exchange,提问作者fishbacp
相关产品推荐
相关产品推荐

