pyqt5+pyinstaller实现深度学习tensorflow.keras模型打包成exe应用程序,并且大幅度减小生成的exe程序大小

最近在试着使用pyqt5,将tensorflow.keras模型打包成EXE应用程序,这样就比较方便的以界面形式展示给他人。下面是我写的一个非常简陋的pyqt5界面。

pyqt5+pyinstaller实现深度学习tensorflow.keras模型打包成exe应用程序,并且大幅度减小生成的exe程序大小_第1张图片

 功能:以按钮+对话框形式加载keras的h5模型和任意一张验证集图像,实现预测分类结果。

现在问题来了,虽然这是一个简单的界面,实现的功能也很简单。但是,这个界面通过pyinstaller打包之后,竟然足足有890MB!!!而我的keras模型h5文件只有70MB,其他文件那就更小了,为什么多出来这么多内容呢?查阅资料后,说是pyinstaller会将anaconda中的一些无用的模块也一起打包。然后我就在anacona中新建了一个环境,只安装了tensorflow、pyqt5和pyinstaller三个模块(当然还有一些建立anaconda环境时自带的模块)。我再次打包,发现得到的EXE应用程序减小到了750MB。由此可见,通过新建anconda环境这种方法依然不能很好的解决问题。后来查阅资料看到有人说使用pipenv建立虚拟环境来打包程序,得到的EXE文件会小很多。不过,我的pycharm加载pipenv虚拟环境时出现了致命问题,弄了一下午都没弄好。接着放弃。

突然,我想到了一点,我的这个tensorflow.keras模型是在tensorflow-gpu上训练的,而我之前打包时环境里安装的是gpu版,如果我换成cpu版会怎么样?然后我在anaconda中新建了个CPU版的tensorflow环境,除了tensorflow不一样以外,其他库都是一毛一样的。最后打包得到的EXE文件惊人的减小到了88MB!!!!从800MB减小到了88MB!!!(此处是以pyinstaller的单文件模式打包)

为了对比两者之间文件差异大小的根本原因,我分别在GPU版tensorflow和CPU版tensorflow两个环境中分别按照pyinstaller的文件夹模式打包:

pyinstaller -F UI.py #按照单个EXE文件模式打包
pyinstaller -D UI.py #按照文件夹模型打包

pyqt5+pyinstaller实现深度学习tensorflow.keras模型打包成exe应用程序,并且大幅度减小生成的exe程序大小_第2张图片

可以看出,build文件夹大小相差很大。接着我们进入这个文件夹看看两者之间的区别:

 pyqt5+pyinstaller实现深度学习tensorflow.keras模型打包成exe应用程序,并且大幅度减小生成的exe程序大小_第3张图片

还没完,让我接着看:

pyqt5+pyinstaller实现深度学习tensorflow.keras模型打包成exe应用程序,并且大幅度减小生成的exe程序大小_第4张图片

所以,在训练时我们会选择GPU版tensorflow,但是在打包成EXE时,为了减少生成的EXE文件大小,我建议使用anaconda重新建立一个空环境,只安装用到的模块,另外tensorflow也记得要安装CPU版本的(前提是待打包代码中不会用到GPU),这样的话,生成的EXE体积会大大减小。对于我的代码来说,生成的EXE体积从800M减小到了88M,差不多10倍。 

问题记录:

1.pyinstaller打包时可能会遇到编码错误,解决如下:

#1.首先进入UI.py所在路径
activate 虚拟环境 #2.激活anconda环境
chcp 65001 #3.没有这一句的话,可能提示编码错误
pyinstaller -F -w UI.py #开始打包UI.py成EXE

 

你可能感兴趣的:(pyqt5+pyinstaller实现深度学习tensorflow.keras模型打包成exe应用程序,并且大幅度减小生成的exe程序大小)