QT(C++) + OpenCV + Python库打包发布可执行EXE
背景
最近写了一个操作界面,不仅用到了OpenCV的函数,还调用了一个python脚本,所以这里记录一下如何将其打包成可以在非开发环境下执行的.exe程序。
踩坑实录
打包过程参考了博客:
QT+Opencv 程序打包发布(超级详细版+常见错误解决)
但是有几个坑需要补充说明。
一、利用windeployqt添加依赖项报错
按照步骤在自定义文件夹下运行windeployqt
,报错:Unable to find the platform plugin.
报错原因
是QT5.14.0版本的自身的bug。
参考:
[1] Qt5.14.0在Windows环境下使用Qt自带程序windeployqt发布失败提示Unable to find Platform Plugin的问题
[2] 使用Qt 5.14.0自带的windeployqt打包程序提示Unable to find Platform Plugin的解决方法
解决方法
升级QT,从QT5.14.0升级为QT5.14.2。
QT 5.14.2的下载地址及安装步骤:
下载地址:https://download.qt.io/archive/qt/5.14/5.14.2/
安装步骤:自行百度
二、利用Dependencies查找程序依赖项
原博客中提到,使用hap-depends查找程序用到的依赖项,但是亲测hap-depends在win10系统下很卡,无法正常运行。因此,找到了Dependencies替代hap-depends。
参考博客:
VC++开发必备神器 – Dependencies,查看依赖库DLL,支持win10,比depends更好用
Dependencies下载地址:https://github.com/lucasg/Dependencies
三、添加Python库
因为要打包的文件调用了Python脚本,因此,还需要在文件夹下添加Python库函数和.dll文件。
步骤
- 在test文件夹下创建Python37文件夹(其中37代表了Python的版本,如果是使用其他版本的Python,可以使用其他数字替代);
- 将Python安装路径下的:
- DLLs
- include
- Lib
- libs
- python3.dll
- python37.dll
- vcruntime140.dll
复制到Python37文件夹下;
注意:这里如果是使用Anaconda安装的Python,则直接拷贝 Anaconda文件夹下的这些文件夹及.dll文件,而不是conda创建的虚拟环境下的文件(不要拷贝"../Anaconda/envs/../"
路径下的文件)。
- 将调用的python脚本添加至test文件夹下;
- 在程序中,添加语句:
// 指定python库地址
Py_SetPythonHome((wchar_t *)(L"./Python37"));
重新在release模式下编译生成.exe文件后,copy至test文件夹中即可。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)