PyInstaller打包含NodeGraphQt/PySide2的Python脚本报错:Qt无QtGui属性
解决PyInstaller打包含NodeGraphQt、PySide2脚本时的
AttributeError: module 'Qt' has no attribute 'QtGui'错误 报错信息
C:\dev\isp-pipeline_revamp\Utils\ISP_Pipeline_Creator\dist>isp_graph_creator.exe Traceback (most recent call last): File "ISP_Pipeline_Creator\isp_graph_creator.py", line 7, in <module> File "<frozen importlib._bootstrap>", line 983, in _find_and_load File "<frozen importlib._bootstrap>", line 967, in _find_and_load_unlocked File "<frozen importlib._bootstrap>", line 677, in _load_unlocked File "PyInstaller\loader\pyimod02_importers.py", line 385, in exec_module File "Qt.py", line 2036, in <module> File "Qt.py", line 2014, in _install AttributeError: module 'Qt' has no attribute 'QtGui' [14784] Failed to execute script 'isp_graph_creator' due to unhandled exception!
已尝试无效方案
- 修改.spec文件添加'Qt'作为隐藏导入
- 使用Py2Exe替代PyInstaller打包
- 卸载并重新安装所有Qt相关依赖
可行解决方案
1. 强制指定Qt绑定版本
在脚本最开头添加以下代码,强制Qt.py使用PySide2作为绑定,避免打包时自动识别出错:
import os os.environ["QT_PREFERRED_BINDING"] = "PySide2"
添加完成后再导入NodeGraphQt、PySide2等相关模块。
2. 完善PyInstaller spec文件的隐藏导入
修改.spec文件,在hiddenimports中补充PySide2核心模块和Qt.py:
hiddenimports=[ 'PySide2.QtGui', 'PySide2.QtWidgets', 'PySide2.QtCore', 'Qt.py' ]
也可直接用命令行参数打包,自动收集PySide2的所有依赖:
pyinstaller --collect-all PySide2 --collect-all NodeGraphQt your_script.py
3. 清理缓存后重新打包
删除项目下的build、dist文件夹以及所有__pycache__目录,清除PyInstaller缓存文件后重新执行打包命令,避免旧缓存导致的依赖缺失。
4. 锁定Qt.py兼容版本
部分新版本Qt.py可能存在打包兼容问题,可安装指定兼容PySide2的版本:
pip install Qt.py==1.3.0
内容的提问来源于stack exchange,提问作者Stav Faran
相关产品推荐
相关产品推荐

