PyQt5 + pyexiv2 打包 EXE 闪退问题解决方案
问题描述
业务场景:使用 PyQt5 开发了一个图形化界面的图片元数据管理小工具。
遇到的问题:
- 直接运行 Python 源码时,写入 XMP 元数据功能正常
- 打包成 EXE 可执行文件后,给 JPG 图片写入 XMP 时程序会闪退
问题原因
闪退的根本原因是 DLL 版本冲突:
PyQt5 自带的以下 DLL 文件版本与conda创建的虚拟环境中的版本不一致:
msvcp140.dllmsvcp140_1.dllmsvcp140_2.dllvcruntime140.dllvcruntime140_1.dll
这些 DLL 文件在 PyQt5 包中也存在一份副本,当版本不匹配时就会导致程序崩溃。
解决方案
步骤 1:定位环境中的 DLL 文件
环境 metadata_new 下 DLL 所在位置:

步骤 2:定位 PyQt5 中的 DLL 文件
PyQt5 的 DLL 所在位置:



步骤 3:删除低版本 DLL
由于 PyQt5 下的 VC DLL 版本较低,删除 PyQt5 中的这些 DLL 文件即可解决闪退问题。
删除路径:
${环境名}\Lib\site-packages\PyQt5\Qt5\bin
删除该路径下的上述 5 个 DLL 文件后,程序将使用系统环境中的高版本 DLL,闪退问题随即解决。
通用解决方法
这个方法适用于所有 PyQt5 打包成 EXE 后出现的 GUI 闪退问题,例如:
- 集成机器学习库的 GUI 程序
- 其他第三方库与 PyQt5 共同打包的应用
- 源码运行正常,但打包后闪退的场景
核心思路:删除 PyQt5 自带的低版本 DLL,让程序使用系统环境中的高版本 DLL。
✨ 提示:在删除 DLL 文件前,建议先备份原文件,以便必要时恢复。
1209

被折叠的 条评论
为什么被折叠?



