PyQt5 + pyexiv2 打包 EXE 闪退问题解决方案

IT疑难杂症诊疗室 10w+人浏览 697人参与

PyQt5 + pyexiv2 打包 EXE 闪退问题解决方案

问题描述

业务场景:使用 PyQt5 开发了一个图形化界面的图片元数据管理小工具。

遇到的问题

  • 直接运行 Python 源码时,写入 XMP 元数据功能正常
  • 打包成 EXE 可执行文件后,给 JPG 图片写入 XMP 时程序会闪退

问题原因

闪退的根本原因是 DLL 版本冲突

PyQt5 自带的以下 DLL 文件版本与conda创建的虚拟环境中的版本不一致:

  • msvcp140.dll
  • msvcp140_1.dll
  • msvcp140_2.dll
  • vcruntime140.dll
  • vcruntime140_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 文件前,建议先备份原文件,以便必要时恢复。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值