当前位置: 代码迷 >> 综合 >> python PyQt kears Tensorflow numpy 打包exe过程
  详细解决方案

python PyQt kears Tensorflow numpy 打包exe过程

热度:137   发布时间:2023-09-06 12:36:38.0

pyinstaller 打包的文件很大

  • 使用以下代码进行打包操作尝试
    • 首先介绍我的各个Py文件
    • 各个py文件涉及的模儿
    • 第一次尝试
    • 第二种方案啊
    • 第三中方案(新建环境)
    • 最终方案
  • 好了,报错
    • 解决办法
    • 执行
    • 总结

使用以下代码进行打包操作尝试

首先介绍我的各个Py文件

python PyQt kears Tensorflow numpy 打包exe过程
首先是我的MoodJudgement2.py。此py文件为我的程序主窗口
predict.py为测试执行模型的原预测文件,为了适应此UI程序,我另改为predictUI.py(下面全部都是基于此文件进行操作)
untitled3.ui 是使用Qtdesigner制作的UI界面。
untitled3.py为此UI界面转化的py文件。后面使用基于untitle3.py文件
abc.ico 是我从网上下载的jpg文件,采用网上在线转化成的ico文件。用于打包文件之后的图标。
上述基本情况就是如此。

各个py文件涉及的模儿

predict文件

from keras.models import load_model
import os
import numpy as np
import pickle as pkl
from PIL import Image as im

MoodJudgement2.py文件,这些有用的

from PyQt5 import QtGui, QtWidgets
from PyQt5.QtCore import QThread, pyqtSignal, QTimer,Qt
from PyQt5.QtWidgets import QFileDialog, QMainWindow,QLabel,QProgressBar
from untitled3 import Ui_MainWindow
from predictUI import Predict_Ui_Main

untitled3.py不做介绍,程序自动转的,不需要更改和引入类库

第一次尝试

pyinstaller -i abc.ico MoodJudgement2.py

python PyQt kears Tensorflow numpy 打包exe过程
打包出来的两个文件build文件夹以及dist文件夹,其中,dist文件夹如图所示。
2.03G。 我只是做了一个简单的测试界面,选择文件夹,然后利用训练好的模型进行对其判定而已。
这2.03G的打包程序是能够使用的,dist里面有我们打包好的exe文件。发给用户的话,用户会不会敲我手心~~~

第二种方案啊

pyinstaller -i abc.ico -F MoodJudgement2.py

打包的好慢,我在等结果,4分钟
python PyQt kears Tensorflow numpy 打包exe过程
虽然打包出了想要的exe格式,并且我没有拿这个exe在别的电脑上面使用

891M的exe文件,并且开始启动文件需要将近一分钟的时间,我在考虑是不是该换一门语言来学习了,或者用C或者用汇编。可没办法,电脑开辟模拟环境总要花费时间,可这个30秒还不够??现在只想说下一个
删除文本

现在我开始逐渐的尝试其他的办法

第三中方案(新建环境)

我不再使用Conda创建的环境,尽管conda打包出来使用没有任何错误,可就是太大了。网上查的千篇一律,是因为conda会把程序的执行环境全部打包出来,我的理解就是把我当前安装的所有东西,deepcopy了一下。
然后我开始使用cmd去打包。
毫无意外,打包出来的exe文件30多M大小,可是不能用。命令同样是上述的命令,查看build的warn开头的txt文件。里面的最下面的报错信息是缺少模块。
其中有下面这些部分:

missing module named cpickle - imported by numpy.compat.py3k (conditional)
missing module named PyQt4 - imported by matplotlib.backends.qt_compat (delayed)
missing module named PyQt5.QtX11Extras - imported by PyQt5 (delayed, conditional, optional), matplotlib.backends.backend_qt5 (delayed, conditional, optional)
missing module named ‘tornado.template’ - imported by matplotlib.backends.backend_webagg (delayed)
missing module named ‘tornado.websocket’ - imported by matplotlib.backends.backend_webagg (top-level)
missing module named ‘tornado.ioloop’ - imported by matplotlib.backends.backend_webagg (top-level)
missing module named ‘tornado.web’ - imported by matplotlib.backends.backend_webagg (top-level)
missing module named tornado - imported by matplotlib.backends.backend_webagg (optional), matplotlib.backends.backend_webagg_core (top-level)
missing module named matplotlib.axes.Axes - imported by matplotlib.axes (delayed), matplotlib.legend (delayed), matplotlib.projections.geo (top-level), matplotlib.projections.polar (top-level), matplotlib.figure (top-level), matplotlib.pyplot (top-level)

上述有一些我根本就没有用到的模块儿,导入不了很正常。所以我不意外,我做的仅仅是把我程序用到的python安装包安装了一下。可还是不行。
爆出错误如下:
Failed to execute script MoodJudgement2
简单来说就是没成功呗。不能用,没什么好说的。准备使用pycharm重新创建一个新的环境,然后再执行我的程序,缺什么喂什么。再不行的话,还有其他的办法。pyinstaller这条路就是这么的曲折!
安装:
keras 2.2.4
keras-applications 1.0.8
keras-base 2.2.4
keras-preprocessing 1.1.0
tensorflow 1.12.0
tensorflow-base 1.12.0
tensorflow-estimator 1.13.0
pillow 6.0.0

使用PyInstaller进行打包时,最常见的错误是Failed to execute script xxx,通常做法是先使用pyinstaller -c xxx.py将应用打包为控制台应用,在命令行执行相应可执行程序查看错误输出,进而逐个排除错误。
开始更改命令为
pyinstaller -c MoodJudgement2.py
python PyQt kears Tensorflow numpy 打包exe过程
实验中 没有所谓的黑窗口报错信息,实不相瞒,我想放弃了。突然觉得800M的东西也挺香。
通过命令行执行此exe文件,爆出如下错误:
Error loading Python DLL ‘E:\datas\WorkProject\affect_emotion\build\MoodJudgement2\python37.dll’
错误不解决不行。确实是很大。

最终方案

我很气愤,因为上网是浪费时间的,不能徜徉在代码里是一种损失,不能写一个完美的算法真的很难受。
接下来,卸载,下载,卸载
卸载Ananconda
卸载miniconda
下载python3.6.5。并且系统环境中只保留py3.6.5
然后执行我的MoodJudgement2.py
首选,缺PyQt5
pip install PyQt5
缺keras
pip install keras
缺tensorflow
pip install tensorflow==1.12.0
缺PIL
pip install pillow
缺 win32api
pip install pywin32

好了,报错

AttributeError: module ‘tensorflow.python.keras.backend’ has no attribute 'get_graph’

解决办法

这是由于我的tensorflow与keras的版本不匹配。怎么查看是否匹配?
[https://docs.floydhub.com/guides/environments/]
我的tensorflow需要keras==2.2.4
没说的。安装。
再次在命令行执行我的py文件。打包命令后面不加 –noconsole。既可以在执行的时候通过黑窗口查看报错内容。
因为我的有图片,有模型,所以需要复制到打包完成的dist文件夹下,与MoodJudgement.exe放在同一个目录。

执行

解决问题。打包完成。

总结

1,我电脑上现在安装的环境变得一塌糊涂,需要重新安装
2,以后不用conda打包
3,安装的东西一定要保留好位置。卸载重新安装的时候好弄。
4,我想写代码。我想进攻机器学习。
5,加油,方法总比困难多!
6,感谢前辈们不懈的贡献,留下记录。