用pyinstaller将python写的深度学习模型(基于tensorflow)转换为独立于python的可执行文件(exe)

用pyinstaller将python写的深度学习模型(基于tensorflow)转换为独立于python的可执行文件(exe)

因为一些原因,我需要将训练好的深度学习预测模型迁移到其他电脑,为了解决迁移环境安装的问题,我开始搜寻python环境打包的,主要有两个方法,一个是docker,一个是exe可执行文件,这里介绍可执行文件方法

1、可用方法

下面是python自带的一些将代码转化为可执行文件的方法,根据我的环境,python3.6,windows,因此我选择了pyinstaller方法
在这里插入图片描述

2、pyinstaller安装

直接在对应环境下利用pip即可

pip install pyinstaller

建议利用国内源下载,我已经事先配置好豆瓣源
也可离线安装,与其他包安装无异

3、打包过程

文件介绍,主程序文件main.py,权重文件model.h5,依赖包y.py,
在cmd窗口操作
先转到对应的虚拟环境,建议对打包的文件创建一个新的虚拟环境,可以大大减小exe文件的大小

conda activate py36

转到文件所在目录

cd 目录

打包

pyinstall main.py -p y.py

这样在当前目录下会生成一的dist文件夹,文件夹下还有一个main文件夹,exe文件就在main文件夹下,需要整个main文件夹程序才能正常运行,权重文件需要拷贝到当前文件夹下即可运行

单文件模式

pyinstall -F main.py -p y.py

这样dist文件夹下仅有一个exe文件,将权重文件与exe文件放在同一目录下即可运行

4、排坑过程

我碰到了几个坑,这边总结一下解决问题的方法

1、ImportError: cannot import name ‘pywrap_tensorflow’,ModuleNotFoundError: No module named 'tensorflow_core.python

在main.py文件下增加hooks文件夹,hooks下新建hook-tensorflow.py文件
文件目录

--mypython.py

--hooks

  --hook-tensorflow.py

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)

类似的错误可在packages中增加环境,亲测matplotlib有效

2、gpu环境运行错误ModuleNotFoundError: No module named ‘tensorflow.python._pywrap_tensorflow_internal’

当tensorflow-gpu版本高于1.6会出现此情况
文件夹生成模式解决方案

在生成的dist/[main]/文件夹中,
找到“_pywrap_tensorflow_internal.pyd”文件,剪切,
在这个文件夹中新建一个tensorflow文件夹,
在tensorflow文件夹中新建一个python文件夹,
将刚刚剪切的pyd文件黏贴到python文件夹中,再次运行exe

单文本模式解决方案

首先在python库文件夹中找到_pywrap_tensorflow_internal.pyd
(懒得找就用文件夹模式生成一次,在exe所在的文件夹中就有),
然后使用以下命令生成。

pyinstaller -F aaa.py --add-data="/path/to/the/pyd/_pywrap_tensorflow_internal.pyd;tensorflow/python"

3、直接点击exe运行闪退

这个暂时还没有很好的解决方案,我的方法是cmd窗口运行,即可看到结果和报错

参考
https://blog.csdn.net/graceful_snow/article/details/103227660
https://blog.csdn.net/graceful_snow/article/details/103227660
https://blog.csdn.net/graceful_snow/article/details/103227660

  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值