开发场景:
近期在用PySide6替代pyqt5的功能,在使用
from PySide6.QtGui import QTextCursor
导入时,始终无法替换,本地服务可以运行,正常使用
pinstaller 后,打包成exe ,拷贝其他服务器无法正常使用,提示以上报错
然而拷贝到其他未安装python环境的电脑就提示
Traceback (most recent call last):
File “bondcopy.py”, line 24, in
ImportError: DLL load failed while importing QtWidgets: 找不到指定的模块。
[PYI-3288:ERROR] Failed to execute script ‘bondcopy’ due to unhandled exception!
解决思路
卸载安装
①卸载安装PySide6
卸载安装PySide6
pip uninstall PySide6
pip install PySide6
②更新pyinstaller
之前版本是
pip install pyinstaller -i https://pypi.tuna.tsinghua.edu.cn/simple
pip install --upgrade pyinstaller -i https://pypi.tuna.tsinghua.edu.cn/simple
③更新python
python版本以前是3.8版本,为此特特意更新到最新版本 3.13
④咨询AI
咨询ai 也是一头雾水,如下
使用 --collect-all 参数
PyInstaller 可能无法自动捕获 PySide6 的所有依赖项。手动指定 PySide6 的模块路径:
pyinstaller --onefile --collect-all PySide6.QtGui --collect-all PySide6.QtWidgets --collect-all PySide6.QtCore your_script.py
手动添加 DLL 路径
能是 PyInstaller 未正确捕获 Qt 的 DLL 路径。可以尝试手动将 Qt 的 DLL 路径添加到环境变量中:
import os
import sys
if getattr(sys, ‘frozen’, False):
os.environ[‘PATH’] = os.path.join(sys._MEIPASS, ‘PySide6’) + ‘;’ + os.environ[‘PATH’]
使用 --add-data 参数
**手动将 PySide6 的依赖项添加到打包文件中:
pyinstaller --onefile --add-data “path_to_pyside6_dlls;.” your_script.py
调试模式
使用 --debug 参数生成调试信息,查看打包后的文件结构:
pyinstaller --onefile --debug your_script.py
使用 --hidden-import
如果某些模块未被自动检测到,可以手动指定隐藏导入:
pyinstaller --onefile --hidden-import PySide6.QtGui --hidden-import PySide6.QtWidgets your_script.py
最小化示例测试
创建一个最简单的 PySide6 程序(如仅显示一个窗口),然后尝试打包。如果最小化示例可以运行,则问题可能出在原始代码的某些特定部分。
`import sys
from PySide6.QtWidgets import QApplication, QLabel, QWidget
app = QApplication(sys.argv)
window = QWidget()
window.setWindowTitle(“PySide6 Example”)
label = QLabel(“Hello, PySide6!”, parent=window)
window.show()
sys.exit(app.exec())
`
打包
其他服务器运行
日志分析:
原因还是在打包工具中,本地环境运行ok,但是更新其他电脑不能正常使用,分析日志
.
17617 INFO: checking PKG
17617 INFO: Building PKG because PKG-00.toc is non existent
17617 INFO: Building PKG (CArchive) test.pkg
17683 INFO: Disabling UPX for D:\develop\python\Lib\site-packages\PySide6\plugins\styles\qmodernwindowsstyle.dll due to CFG!
17685 INFO: Disabling UPX for D:\develop\python\Lib\site-packages\PySide6\plugins\imageformats\qico.dll due to CFG!
17687 INFO: Disabling UPX for D:\develop\python\Lib\site-packages\PySide6\plugins\imageformats\qicns.dll due to CFG!
17689 INFO: Disabling UPX for D:\develop\python\Lib\site-packages\PySide6\plugins\imageformats\qsvg.dll due to CFG!
17691 INFO: Disabling UPX for D:\develop\python\Lib\site-packages\PySide6\plugins\platforms\qminimal.dll due to CFG!
17692 INFO: Disabling UPX for D:\develop\python\Lib\site-packages\PySide6\plugins\imageformats\qtga.dll due to CFG!
17694 INFO: Disabling UPX for D:\develop\python\Lib\site-packages\PySide6\plugins\generic\qtuiotouchplugin.dll due to CFG!
17695 INFO: Disabling UPX for D:\develop\python\Lib\site-packages\PySide6\plugins\imageformats\qwebp.dll due to CFG!
17696 INFO: Disabling UPX for D:\develop\python\Lib\site-packages\PySide6\plugins\platforminputcontexts\qtvirtualkeyboardplugin.dll due to CFG!
17698 INFO: Disabling UPX for D:\develop\python\Lib\site-packages\PySide6\plugins\iconengines\qsvgicon.dll due to CFG!
17702 INFO: Disabling UPX for D:\develop\python\Lib\site-packages\PySide6\plugins\imageformats\qtiff.dll due to CFG!
17704 INFO: Disabling UPX for D:\develop\python\Lib\site-packages\PySide6\plugins\imageformats\qjpeg.dll due to CFG!
17705 INFO: Disabling UPX for D:\develop\python\Lib\site-packages\PySide6\plugins\imageformats\qwbmp.dll due to CFG!
17707 INFO: Disabling UPX for D:\develop\python\Lib\site-packages\PySide6\plugins\imageformats\qpdf.dll due to CFG!
17709 INFO: Disabling UPX for D:\develop\python\Lib\site-packages\PySide6\plugins\platforms\qdirect2d.dll due to CFG!
17712 INFO: Disabling UPX for D:\develop\python\Lib\site-packages\PySide6\plugins\platforms\qwindows.dll due to CFG!
17713 INFO: Disabling UPX for D:\develop\python\Lib\site-packages\PySide6\plugins\imageformats\qgif.dll due to CFG!
17715 INFO: Disabling UPX for D:\develop\python\Lib\site-packages\PySide6\plugins\platforms\qoffscreen.dll due to CFG!
17830 INFO: Disabling UPX for D:\develop\python\Lib\site-packages\PySide6\plugins\networkinformation\qnetworklistmanager.dll due to CFG!
17832 INFO: Disabling UPX for D:\develop\python\Lib\site-packages\PySide6\plugins\tls\qopensslbackend.dll due to CFG!
17834 INFO: Disabling UPX for D:\develop\python\Lib\site-packages\PySide6\plugins\tls\qschannelbackend.dll due to CFG!
17837 INFO: Disabling UPX for D:\develop\python\Lib\site-packages\PySide6\plugins\tls\qcertonlybackend.dll due to CFG!
18049 INFO: Disabling UPX for D:\develop\python\VCRUNTIME140.dll due to CFG!
18051 INFO: Disabling UPX for D:\develop\python\Lib\site-packages\PySide6\Qt6Core.dll due to CFG!
18052 INFO: Disabling UPX for D:\develop\python\Lib\site-packages\PySide6\Qt6Gui.dll due to CFG!
18055 INFO: Disabling UPX for D:\develop\python\Lib\site-packages\shiboken6\MSVCP140.dll due to CFG!
18056 INFO: Disabling UPX for D:\develop\python\Lib\site-packages\PySide6\Qt6Widgets.dll due to CFG!
18058 INFO: Disabling UPX for D:\develop\python\Lib\site-packages\PySide6\Qt6Svg.dll due to CFG!
18059 INFO: Disabling UPX for D:\develop\python\VCRUNTIME140_1.dll due to CFG!
18060 INFO: Disabling UPX for D:\develop\python\Lib\site-packages\PySide6\Qt6Network.dll due to CFG!
18061 INFO: Disabling UPX for D:\develop\python\Lib\site-packages\PySide6\Qt6VirtualKeyboard.dll due to CFG!
18065 INFO: Disabling UPX for D:\develop\python\Lib\site-packages\PySide6\Qt6Pdf.dll due to CFG!
18123 INFO: Disabling UPX for D:\develop\python\Lib\site-packages\PySide6\MSVCP140.dll due to CFG!
18132 INFO: Disabling UPX for D:\develop\python\Lib\site-packages\PySide6\VCRUNTIME140_1.dll due to CFG!
18141 INFO: Disabling UPX for D:\develop\python\Lib\site-packages\PySide6\VCRUNTIME140.dll due to CFG!
18147 INFO: Disabling UPX for D:\develop\python\Lib\site-packages\shiboken6\VCRUNTIME140.dll due to CFG!
18149 INFO: Disabling UPX for D:\develop\python\Lib\site-packages\shiboken6\VCRUNTIME140_1.dll due to CFG!
18151 INFO: Disabling UPX for D:\develop\python\Lib\site-packages\PySide6\MSVCP140_2.dll due to CFG!
18153 INFO: Disabling UPX for D:\develop\python\Lib\site-packages\PySide6\MSVCP140_1.dll due to CFG!
18154 INFO: Disabling UPX for D:\develop\python\Lib\site-packages\PySide6\Qt6Qml.dll due to CFG!
18156 INFO: Disabling UPX for D:\develop\python\Lib\site-packages\PySide6\Qt6Quick.dll due to CFG!
18158 INFO: Disabling UPX for D:\develop\python\Lib\site-packages\PySide6\Qt6OpenGL.dll due to CFG!
18159 INFO: Disabling UPX for D:\develop\python\Lib\site-packages\PySide6\Qt6QmlMeta.dll due to CFG!
18162 INFO: Disabling UPX for D:\develop\python\Lib\site-packages\PySide6\Qt6QmlModels.dll due to CFG!
18164 INFO: Disabling UPX for D:\develop\python\Lib\site-packages\PySide6\Qt6QmlWorkerScript.dll due to CFG!
26863 INFO: Building PKG (CArchive) test.pkg completed successfully.
26869 INFO: Bootloader D:\develop\python\Lib\site-packages\PyInstaller\bootloader\Windows-64bit-intel\runw.exe
26870 INFO: checking EXE
26870 INFO: Building EXE because EXE-00.toc is non existent
26870 INFO: Building EXE from EXE-00.toc
投喂ai ,发现结果如下:
从日志信息来看,您正在使用PyInstaller 6.13.0版本将一个Python脚本(test.py)打包成可执行文件。您的Python环境版本为3.13.3,操作系统为Windows 10。打包过程包括分析模块、创建base_library.zip、处理动态库等步骤。由于某些DLL文件启用了CFG(Control Flow Guard),UPX(用于压缩可执行文件)被禁用。最终,PyInstaller成功地将脚本打包成了一个名为test.exe的可执行文件,并将其放置在D:\demo\dist目录下。
所以是否需要启动CFG、UPX呢
解决方案:
以前用PYQT5 是可以使用的,现在想更新成PySide6,折腾了好几天了,不知道有没有道友有其他方式推荐,可以解决PySide6问题