pyinstaller 打包 keras tensorflow pyqt 的 打包步骤(踩坑日记 )

打包过程:

1. 确认自己的库环境

本文主要为:

  • PyQt5                5.13.0
  • PyQt5-sip            12.7.2
  • opencv-python        4.2.0.34
  • pyqt5-tools          5.13.0.1.5
  • tensorflow           2.1.0
  • Keras                2.3.1

其中值得注意的是,keras和tensorflow 使用Conda安装 且安装CPU版本 ,因为要考虑到并不是每台机子都安装了GPU环境,且GPU封装后 体积极大

#必须按照这个顺序去装
conda install tensorflow -i https://pypi.tuna.tsinghua.edu.cn/simple/
conda install keras -i https://pypi.tuna.tsinghua.edu.cn/simple/

#当使用conda安装keras失败时,使用pip安装keras也可,但必须确保安装了以上的tensorflow
pip install keras -i https://pypi.tuna.tsinghua.edu.cn/simple/

pyqt安装请参考本博主的另一篇文章 :https://blog.csdn.net/weixin_40423303/article/details/105906174

2.安装pyinstaller

pip install pyinstaller -i https://pypi.tuna.tsinghua.edu.cn/simple/

3.进行封装

首先在终端中激活conda的环境(安装上面库的环境),并cd进入要封装的文件所在的路径,如图

pyinstaller 打包 keras tensorflow pyqt 的 打包步骤(踩坑日记 )_第1张图片

接着 输入 

pyinstaller -F -w  main.py

#此指令为一般性封装,-F代表所有库和文件都封装在一个.exe文件中,-w代表运行封装后的软件时不在弹出终端
#main.py是你要封装的程序的主程序,其他代码文件pyinstaller会自动关联
#注意:此指令用于不包含tensorflow和keras时使用

#注意:用于封装tensorflow和keras时运行以上指令报错,一般为我错误解决方案中的这三个错误,这三个错误必须解决不然无法封装。

 

 

下一步将跳转至解决错误:

 

报错及解决方案

但因为博主封装需要包含tensorflow和keras,这时开始报各样的错,可以根据报错在我下面找到解决方案,如下:

 

1.打包和运行打包后的软件报错,如:

Traceback (most recent call last):
  File "site-packages\PyInstaller\loader\rthooks\pyi_rth_pkgres.py", line 13, in
 
  File "c:\program files\python37\lib\site-packages\PyInstaller\loader\pyimod03_
importers.py", line 623, in exec_module
    exec(bytecode, module.__dict__)
  File "site-packages\pkg_resources\__init__.py", line 86, in 
ModuleNotFoundError: No module named 'pkg_resources.py2_warn'
[3844] Failed to execute script pyi_rth_pkgres

(转载原文:https://msd.misuland.com/pd/3691885202524606362?page=1)

解决方法是:找到python环境对应的目录如: envs\hay\Lib\site-packages\pkg_resources\__init__.py,把86行注释掉。重新打包即可,对应内容如下:

__import__('pkg_resources.extern.packaging.version')
__import__('pkg_resources.extern.packaging.specifiers')
__import__('pkg_resources.extern.packaging.requirements')
__import__('pkg_resources.extern.packaging.markers')
#__import__('pkg_resources.py2_warn')  #就是这一行注释掉


__metaclass__ = type

2.打包和运行打包后的软件报错,如:   中 Importerror no module named win32com.client 错误解决

转载:https://blog.csdn.net/poppyque/article/details/85252963

通过安装win32com解决问题 ,再次封装就好

pip install pypiwin32 -i https://pypi.tuna.tsinghua.edu.cn/simple/

 

3.打包和运行打包后的软件报错,如:ModuleNotFoundError: No module named 'tensorflow_core.python和cannot import name 'pywrap_tensorflow'

(转载原文:https://blog.csdn.net/TaChean/article/details/104664435/)

解决方法:

              第一步在所运行的python文件(本文是main.py)添加

from tensorflow import *

pyinstaller 打包 keras tensorflow pyqt 的 打包步骤(踩坑日记 )_第2张图片

                   第二步:路径下创建一个名为hooks的文件夹,并在hooks文件夹中创建python程序文件hook-tensorflow.py,其中的代码如下:

from PyInstaller.utils.hooks import collect_all
def hook(hook_api):
    packages = [
        'tensorflow',
        'tensorflow_core',
        'astor'
    ]
    for package in packages:
        datas, binaries, hiddenimports = collect_all(package)
        hook_api.add_datas(datas)
        hook_api.add_binaries(binaries)
        hook_api.add_imports(*hiddenimports)

如下

--main.py

--hooks

     --hook-tensorflow.py

pyinstaller 打包 keras tensorflow pyqt 的 打包步骤(踩坑日记 )_第3张图片

        第三步:运行封装指令

pyinstaller -F -w --additional-hooks-dir=hooks main.py

 

 

 


至此 所有坑和问题都解决了 ,且软件顺利在无任何库的其他windows设备上正常运行!!!!

 

你可能感兴趣的:(pyinstaller 打包 keras tensorflow pyqt 的 打包步骤(踩坑日记 ))