python程序打包成可执行文件【基础篇】

python程序打包成可执行文件【基础篇】

提示:博主取舍了很多大佬的博文并亲测有效,分享笔记邀大家共同学习讨论


前言

在【入门篇】中,我们简单介绍了单个py文件如何打包成exe可执行文件直接运行程序。现在我们来更深入的学习python项目打包,如何打包深度学习模型代码。


安装PyInstaller包

在入门篇中已经详细讲述过了,这里只做大致介绍。创建一个纯净的、没有多余的第三方库和模块的小型Python环境,尽可能的少的库和模块要来打包exe可执行文件。

# environment_name 环境名、3.x Python的版本
conda create -n environment_name  python==3.x
# 激活新环境
source activate environment_name
# 下载安装Pyinstaller模块
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple Pyinstaller

打包深度学习模型

博主以MiVOS官方Pytorch代码为例,读者可以先阅读博文【MiVOS官方代码Pytorch实现与源码解析】了解MiVOS大致的功能和用法、搭建深度学习运行环境和运行代码。

深度学习运行环境必须搭建到上节安装了PyInstaller包的虚拟环境中,才能将度学习运行环境一起打包。

为了方便教学,博主对MiVOS部分功能作出了简化,下载代码interactive_gui_4.1.py加入到项目路径下:

不需要事先清楚MiVOS模型原理和代码,本博文以打包成可执行文件教学为主。

生成spec文件

深度学习模型的项目文件一般比较复杂,文件之间的引用会比较多,因此更加适合使用spec文件对整个项目进行的打包,执行以下命令生成spec文件:

# xxx.py 一般是需要执行的主文件,深度学习模型中一般为推理文件
pyi-makespec -w xxx.py
# eg: pyi-makespec -w interactive_gui_4.1.py

修改spec文件

由于打包的主文件是xxx.py,因此生成的spec文件名称为xxx.spec,俩者在同一个文件夹下:

默认生成的spec文件初始内容如下所示:

# -*- mode: python ; coding: utf-8 -*-


block_cipher = None


a = Analysis(
    ['interactive_gui_4.1.py'],
    pathex=[],
    binaries=[],
    datas=[],
    hiddenimports=[],
    hookspath=[],
    hooksconfig={},
    runtime_hooks=[],
    excludes=[],
    win_no_prefer_redirects=False,
    win_private_assemblies=False,
    cipher=block_cipher,
    noarchive=False,
)
pyz = PYZ(a.pure, a.zipped_data, cipher=block_cipher)

exe = EXE(
    pyz,
    a.scripts,
    [],
    exclude_binaries=True,
    name='interactive_gui_4.1',
    debug=False,
    bootloader_ignore_signals=False,
    strip=False,
    upx=True,
    console=False,
    disable_windowed_traceback=False,
    argv_emulation=False,
    target_arch=None,
    codesign_identity=None,
    entitlements_file=None,
)
coll = COLLECT(
    exe,
    a.binaries,
    a.zipfiles,
    a.datas,
    strip=False,
    upx=True,
    upx_exclude=[],
    name='interactive_gui_4.1',
)

更改几个位置内容:

名称作用
Analysis的第一个[]声明打包文件(xxx.py)引用到的py文件夹路径
pathex打包的模型文件夹路径
binaries权重文件pth路径 (以元组的形式)
datas非py文件(包括但不限于图片数据集)的路径(以元组的形式)

只展示更改位置的内容

    ['interactive_gui_4.1.py',
    "E:/deep-learning-for-image-processing-master/MiVOS/inference_core.py",
    "E:/deep-learning-for-image-processing-master/MiVOS/model/s2m/_deeplab.py",
    "E:/deep-learning-for-image-processing-master/MiVOS/model/s2m/s2m_network.py",
    "E:/deep-learning-for-image-processing-master/MiVOS/model/s2m/s2m_resnet.py",
    "E:/deep-learning-for-image-processing-master/MiVOS/model/s2m/utils.py",
    "E:/deep-learning-for-image-processing-master/MiVOS/model/propagation/mod_resnet.py",
    "E:/deep-learning-for-image-processing-master/MiVOS/model/propagation/modules.py",
    "E:/deep-learning-for-image-processing-master/MiVOS/model/propagation/prop_net.py",
    "E:/deep-learning-for-image-processing-master/MiVOS/model/aggregate.py",
    "E:/deep-learning-for-image-processing-master/MiVOS/model/attn_network.py",
    "E:/deep-learning-for-image-processing-master/MiVOS/model/fusion_model.py",
    "E:/deep-learning-for-image-processing-master/MiVOS/model/fusion_net.py",
    "E:/deep-learning-for-image-processing-master/MiVOS/interact/interaction.py",
    "E:/deep-learning-for-image-processing-master/MiVOS/interact/s2m_controller.py",
    ],
    pathex=["E:/deep-learning-for-image-processing-master/MiVOS"],
    binaries=[("E:/deep-learning-for-image-processing-master/MiVOS/saves/s2m.pth", "saves"),
    ("E:/deep-learning-for-image-processing-master/MiVOS/saves/fusion.pth", "saves"),
    ("E:/deep-learning-for-image-processing-master/MiVOS/saves/propagation_model.pth", "saves")
    ],
    datas=[],

这里datas是空的是因为interactive_gui_4.1.py代码中可以通过以下命令指定数据集的存放位置:

parser.add_argument('--images', help='Folder containing input images. Either this or --video needs to be specified.')

当然binaries也可以是空的,不过在推理阶段,通常权重文件已经确定,因此放置位置是固定的,元组的形式为(“权重文件pth绝对路径”, “拷贝权重文件pth到打包模型文件内的指定文件夹下”)。

运行spec文件进行打包

修改spec文件后,在激活的对应虚拟环境下进行打包用如下命令进行打包,否者会报错:

pyinstaller xxx.spec
# eg: pyinstaller interactive_gui_4.1.spec

完成打包后在pathex指定的模型工程文件夹下产生build(可以删除)和dist文件夹:

所需的可执行文件在dist目录内:
在这里插入图片描述
成功拷贝权重文件pth到打包模型文件内的指定文件夹下:

通常数据集地址是根据使用者而定的,没必要拷贝到打包模型文件内的指定文件夹下固定死。

执行exe可执行文件

通常可以直接点击exe运行项目,因为不需要用命令行进行额外的输入。博主打包的exe需要命令行进行外部输入,因此用cmd命令行执行:

# 在exe所在的目录下执行命令
interactive_gui_4.1.exe --images E:\deep-learning-for-image-processing-master\MiVOS\testimages

在这里插入图片描述


总结

与其他的打包模块相比,使用Python的Pyinstaller模块进行打包的使用者最多,用起来简便,因此本文以Pyinstaller模块打包Python深度学习模型为例,为大家提供一个进阶参考。


附录

博主打包的exe是交互式视频分割的工具,电脑性能不错的朋友,想体验的大伙可以从【MiVOS的exe百度云地址,提取码:bele】获取,无需安装环境就可以体验。【官方实现效果参考】,博主做了部分功能简化,只保留了核心功能,想了解MiVOS原理和代码的请参考博主的【MiVOS官方Pytorch代码讲解系列】。

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 14
    评论
评论 14
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值