最近有个Python小项目要打个包,项目结构比较简单

  • main.py(主文件),
  • 以及model_050.hdf5 (在云端训练好的AI模型)

主函数里引用了一些包,如下

需要解决的问题:

  1. 将main.py和model_050.hdf5打包到一个exe文件中,这样模型不会容易被别人拷贝走
  2. 将这些依赖包cv2, PyQt5, tensorflow也全部打包进这个exe文件,这样脱离环境也能直接运行

Step1:

参考了文章:

这篇文章真是一盏明灯,没有走一步多余的弯路

Pyinstaller如何打包多个资源文件(超详细教程)

文章中的这个要替换一下,文章是用的中文引号,通过不了。换成下面的就ok
datas=[(‘res’,’.’)],

亲测可行:下面是我的项目结构

一通操作之后获得了main.exe

满怀欣喜的一运行,报错啦

ImportError: OpenCV loader: missing configuration file: [‘config.py‘].

也是正常,这么多年经验告诉我,一般都不可能一次性过的

Step2:

国外网站一通搜,没搞定啊,后来找到一个中国小哥的文章,搞定了

因为文章中有下面一句话,我知道了他已经踩过了同样的坑

查阅了往上的方法大部分都说升级 pyinstaller 和opencv就可以解决:

可是我的库都是最新版本的,根本没得升级。找了很久终于找到了一个成功的解决方法:

ImportError: OpenCV loader: missing configuration file: [‘config.py‘]. 报错解决

关键获取cv2的地址:

文件中建议用下面这条命令生成exe,

pyinstaller main.py -F –paths=”D:\ProgramData\Anaconda3\lib\site-packages\cv2″

可是我之前用的方式是生成了main.spec配置文件的方式啊,上面的命令感觉不适合我

机智如我,那我到main.spec里看看呗

找到了pathex,一看就是配置额外扫描地址的

果断把cv2的位置放了进去

pyinstaller main.spec重新生成exe。

嘿嘿~~工作了!

Step3:

打包成一个一键安装的程序,第一感觉就想到了Wix,然后找到了两篇文章

把Python代码打包成电脑软件和手机App

[Wix] 安装部署——起步

想着程序是用pyinstaller打包成exe的要么还是用第一篇文章中描述的方式先试试

稍微试了一下,后来发现文章中要下载Git,然后例子是打包的.py文件,和我生成的exe有点区别

果断放弃,有点费时。

那么开始使用第二种方式,因为刚好visualstudio 2017本来我就有装

创建了一个setup project for wix v3

打开上面的Product.wxs配置了安装目录,以及exe引用地址,还有需要的桌面快捷方式

build之后,生成了msi安装包和一个.cab文件

双击.cab文件之后发现,原来之前的exe藏在这里面了

双击msi一键安装之后,发现3件套全了,桌面快捷方式,程序位置,以及windows安装程序列表

Step4:

深吸一口气,双击AIDetect快捷方式,在万籁俱静中等待程序运行,成功!!!

可谓是:踏破铁鞋无觅处得来全不费功夫~~ (为什么会突然想到这句,奇怪了……好像和主题无关嘛)