运行python开发的程序,需要用户的电脑部署好python环境,而且还需要用户在命令行中输入命令来运行,当然你也可以写好bat脚本,让用户双击一下即可运行,但是依然还是需要用户电脑有python环境,对于普通用户来说,运行你的程序还得去部署环境,使用成本太高了。
那么,python程序能不能做到像普通软件一样,让用户直接双击就能运行的呢?
为了解决这个难题,pyinstaller应运而生,pyinstaller支持将python打包成window / Mac / GNU/Linux的应用软件, 算是覆盖了所有主流的操作系统了
pyinstaller官网:https://www.pyinstaller.org/
pyinstaller安装:
pip install PyInstaller
打包python文件为可执行文件exe:
一些关键的option参数选项:
--clean:在编译成exe之前,清除PyInstaller缓存并删除临时文件
--log-level LEVEL:编译时控制台打印日志的信息量,取值其一:TRACE, DEBUG, INFO, WARN, ERROR, CRITICAL (default: INFO).
-D, --onedir:指定生成一个包含exe可执行文件的单文件夹包(这是默认生成exe的方式)
-F, --onefile:指定只生成单个exe可执行文件(即把上面文件夹下所有的文件都打包进单个exe中,但是实际运行时候,会解压到一个临时文件才运行,因此,这种方式启动会比-D会慢一丢丢)
-i , --icon:将该图标应用于Windows可执行文件(默认:应用PyInstaller的图标)
pyinstaller打包的命令行如下:
pyinstaller -D test_argparse.py
这里使用参数-D是将软件打包在一个独立文件夹中:
注意:如果使用参数-F则是将上面那个独立文件夹打包为一个exe,每一次调用都需要解压到一个临时文件才运行,如果你包含了比较复杂的模块比如cv2或者tensorflow,那解压时间会变得非常久
打包的python程序可以参考我的另外一篇博文:https://blog.csdn.net/jin739738709/article/details/113318496
C++调用exe:
system函数的头文件是stdlib.h,C语言调用包含cv2的exe不用再配置opencv的环境了,因为那些cv必须的dll、h、lib啥的都已经包含在打包文件夹中了
#include<stdlib.h>
#include<iostream>
using namespace std;
int main() {
cout << "hello" << endl;
system(".\\test_argparse\\dist\\test_argparse\\test_argparse.exe --image=.\\default2.jpg --sparse=True --seed=27 --epochs=20");
//system(".\\test_argparse\\dist\\test_argparse\\test_argparse.exe");
//system("pause");
return 0;
}
这里注意system函数中的--image参数的输入值是 .\\defaul.jpg 而不是 ‘.\\default.jpg’,更不是 “.\\default.jpg”,
否则会出现以下错误:
意思就是opencv按照给定的路径读取不到图像,这里面可能是路径写内容写错或者格式写错,这里就是格式写错!
参考博文:
https://www.cnblogs.com/mini-monkey/p/11195309.html