python程序打包成可执行文件【进阶篇】

news2025/1/11 9:50:38

python程序打包成可执行文件【进阶篇】

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


文章目录

  • python程序打包成可执行文件【进阶篇】
    • @[TOC](文章目录)
  • 前言
  • 安装PyInstaller包
  • 打包深度学习模型
    • 生成spec文件
    • 修改spec文件
    • 运行spec文件进行打包
    • 执行exe可执行文件
  • 总结
  • 附录

前言

在【入门篇】中,我们简单介绍了单个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模型原理和代码,这里只是为了方便讲解

生成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代码讲解系列】。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/436523.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

为什么倒谱可以分析回声

一个有趣的现象:倒谱上的第一个峰,恰好对应回声相比原声的延时。回声 y y y 是原始声音 x x x 延迟 t 0 t_0 t0​ 秒后的、带有衰减 α α α 的副本 y α x ( t − t 0 ) y αx (t - t_0) yαx(t−t0​) 方便起见,这里取 α 1 α …

抖音强势入局服装生意,出手就是1个亿,服装实体店出路在哪?

最近,抖音盯上了服装生意。 据悉,抖音近期组建了一个自营服装团队,在APP推出了一家“飞云织上”的店铺,店铺主体公司是“上海歆湃信息科技有限公司”。 根据爱企查显示,这家公司由抖音集团(香港&#xff09…

RabbitMQ-消息模型

什么是MQ MQ全称是Message Queue,即消息对列!消息队列是典型的:生产者、消费者模型。生产者不断向消息队列中生产消息,消费者不断的从队列中获取消息。因为消息的生产和消费都是异步的,而且只关心消息的发送和接收,没…

IPV4与IPV6是什么?有什么区别?

目录 一. IPV4是什么? 二. IPV6是什么 三. IPv4和IPv6有什么区别? 1.地址类型 2.数据包大小 3.header区域字段数 4.可选字段 5.配置 6.安全性 7.与移动设备的兼容性 8.主要功能 IP协议(互联网协议)是互联网协议群&#…

USB TO SPI / USB TO I2C 软件概要 6--- 专业版调试器

所需设备: 1、USB转SPI_I2C适配器(专业版); 软件概述: SPI类: USB TO SPI 1.0-Slave SPI从机软件,适合单步调试,支持SPI工作模式0、1、2、3,自动跟随主机通讯速率,自动接收数据; USB TO S…

大城市的IT岗位,饱和了么?

现在学或即将更要学习IT专业的同学,经常会考虑这样一个问题:现在的计算机专业到处都有,大学里有、职业学校有,就连社会上的培训机构也有,而且专业分类更细化,有这么多的地方都在培训计算机相关专业&#xf…

二本4年测龄年仅25岁,五面阿里(定薪25K).....

体验了一下阿里的面试,不愧是大厂,考察范围既有深度也有宽度。努力回想了下面试的内容和自己当时的回答,这里给大家分享下自己的经验,也给自己做个归档,希望能给正在准备跳槽,找工作的朋友一点帮助&#xf…

每一个软件测试工程师都有要牢记的误区

最近跟一些刚刚进入软件测试行业的朋友去交流,发现了一个有趣的现象,就是对于这个行业的很多问题的认识都是一致的片面,当然也可以理解为误区。自己利用一点时间,把他们对于这个行业的认识误区都罗列出来,然后结合自己…

【Python从入门到进阶】16、文件的打开和关闭

接上篇《15、函数的定义和使用》 上一篇我们学习了Python中函数的定义和使用,包括函数的参数、返回值、局部变量和全景变量等操作。从本篇开始我们来开始学习Python对文件的一些操作,本篇我们主要讲解如何使用Python打开和关闭文件。 一、打开/创建文件…

全国青少年编程等级考试scratch四级真题2023年3月(含题库答题软件账号)

青少年编程等级考试scratch真题答题考试系统请点击 电子学会-全国青少年编程等级考试真题Scratch一级(2019年3月)在线答题_程序猿下山的博客-CSDN博客_小航答题助手 1.编写一段程序,从26个英文字母中,随机选出10个加入列表a。空白…

【id:45】【20分】A. Equation(类与对象+构造)

题目描述 建立一个类Equation,表达方程ax2bxc0。类中至少包含以下方法: 1、无参构造(abc默认值为1.0、1.0、0)与有参构造函数,用于初始化a、b、c的值; 2、set方法,用于修改a、b、c的值 3、ge…

JSP原理

1.什么是JSP Java Server Page:Java服务器端页面,也和Servlet一样,用于动态Web技术 最大的特点:写JSP就像再写HTML 页面生成了java JSP本质上就是servlet 3.输出页面前增加的代码 1.response.setContentType("text/html"); //设…

C++ ubuntu环境下安装编译部署环境,用onnxruntime部署ppyoloe_r模型

在新安装的ubuntu环境下修改源、安装gcc和cmake,编译安装opencv,安装onnxruntime环境。并编写cmakelist文件,编译与运行ppyoloe_r模型。 windows环境下onnx部署ppyoloe_r模型的代码可以参考 https://blog.csdn.net/a486259/article/details/1…

Python-入门基础小练习

通过前面的两个篇章Python-入门基础篇和Python-入门基础语句篇大家应该已经认识了python基础的语句和函数了,并且可以使用pycharm编译器创建.py文件进行运行了,今天适当的来一些小练习,给枯燥的学习增添一些趣味性。 判断一个数是否为偶数 …

Node 模块

文章目录 Node 模块概述使用方式一:module.exports方式二:exports 目录模块package.json配置 引入模块的基本流程 Node 模块 概述 将一个复杂的程序文件依据一定规则(规范)拆分成多个文件的过程称之为模块化。 其中拆分出的 每…

Identity标识框架配上JWT的使用

在Identity标识框架的代码上继续编写 .Net中的标识框架Identity_风的艺术的博客-CSDN博客 添加NuGet包 Nuget:Microsoft.AspNetCore.Authentication.JwtBearer 创建存储JWT数据类 public class JWTOptions { public string SigningKey { get; set; } pub…

嵌入式51单片机03-数码管系列

文章目录 数码管一、数码管基础知识二、数码管系列代码1. 数码管操作(单个数码管静态显示)(1)仿真电路图(2)源代码(3)实验结果 2. 数码管操作(多个数码管静态显示&#x…

CSDN官方文章MD编辑器文章示例

这里写自定义目录标题 欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants 创建一个自定义列表如何创建一个…

Day950.遗留系统的四化建设 -遗留系统现代化实战

遗留系统的四化建设 Hi,我是阿昌,今天学习记录的是关于遗留系统的四化建设的内容。 对于老旧、过时,但又十分重要、不可替代的遗留系统,是遗留系统。听之任之只会埋下隐患,真正出现问题就为时已晚了。在动手改造遗留…

【蓝桥杯省赛真题39】Scratch棒球本垒打 少儿编程scratch图形化编程 蓝桥杯省赛真题讲解

目录 scratch棒球本垒打 一、题目要求 编程实现 二、案例分析 1、角色分析