python 打包可执行文件-pyinstaller详解

python 打包可执行文件-pyinstaller详解

  • 引言
  • 一、参数详解
  • 二、优化代码
  • 三、体积压缩

引言

pyinstaller是一个将python程序打包成独立可执行文件(exe,app等)的工具,它具有跨平台兼容性,可以在windows,mac和linux上使用。需要注意其不是一个交叉编译工具,只能在对应系统的平台下生成该平台的可执行文件,例如:无法在windows平台下生成linux系统的可执行文件。

安装:pip install -U pyinstaller
pyinstaller官方文档:https://pyinstaller.org/en/stable/

  • 以python MP4视频转GIF动图这篇博客的程序为例,展示pyinstaller的用法。

一、参数详解

打包命令:pyinstaller xxx.py,其主要参数如下:

可参考https://pyinstaller.org/en/stable/usage.html#options

  • -F, --onefile 仅生成一个可执行文件。
  • -D, --onedir 生成一个文件夹,里面包含可执行文件。
  • -n NAME, --name NAME 输出文件的名称,默认xx.py的名称xx。
  • --distpath DIR 输出路径,默认 ./dist。
  • -y, --noconfirm 覆盖输出文件不需要确认。
  • --clean 在生成之前,清理PyInstaller缓存并删除临时文件。

WindowsMac Os X 特有参数:

  • -c, --console, --nowindowed 打开控制台窗口(默认)。
  • -w, --windowed, --noconsole 不打开控制台窗口。

仅限Windows的特有参数

  • –hide-console 如果程序拥有控制台窗口(即,不是从现有控制台窗口启动的),则引导加载程序会自动隐藏或最小化控制台窗口。
  • -r RESOURCE, --resource RESOURCE 向Windows可执行文件添加或更新资源。

进行使用,对main.py进行打包:

  • pyinstaller main.py,生成了main文件夹,里面包含dll、exe等文件
    在这里插入图片描述
  • pyinstaller -F -w --distpath ./ -n MP4_to_GIF main.py,在当前路径只生成了一个exe文件,但是比较大
    在这里插入图片描述

二、优化代码

之前在代码中使用了import *,比如:

from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.QtWidgets import *
from PyQt5.QtCore import *

修改为,用到什么import什么,其它代码也做相应修改,比如将QtGui.QFont 改为 QFont

from PyQt5.QtCore import QSize, QRect, QMetaObject, QCoreApplication
from PyQt5.QtGui import QFont
from PyQt5.QtWidgets import QFileDialog, QPushButton, QWidget, QApplication, QMainWindow
  • 这样修改挺麻烦的…,从原来的111MB减少到了102MB。 对于这个程序来说,有一定进步,但意义不大
    在这里插入图片描述

更进一步可参考:使用pipenv虚拟环境打包

三、体积压缩

下载地址:UPX官网

参数 --upx-dir UPX_DIR 可手动设置UPX程序路径

  • pyinstaller -F -w --distpath ./ -n MP4_to_GIF --upx-dir ./upx-4.1.0-win64 main.py,打包变慢了…体积显著减少,从102MB减到了85MB
    在这里插入图片描述

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

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

相关文章

Flink--9、双流联结(窗口联结、间隔联结)

星光下的赶路人star的个人主页 我还有改变的可能性,一想起这点,我就心潮澎湃 文章目录 1、基于时间的合流——双流联结(Join)1.1 窗口联结(Window Join)1.2 间隔联结(Interval Join)…

项目设计:YOLOv5目标检测+机构光相机(intel d455和d435i)测距

1.介绍 1.1 Intel D455 Intel D455 是一款基于结构光(Structured Light)技术的深度相机。 与ToF相机不同,结构光相机使用另一种方法来获取物体的深度信息。它通过投射可视光谱中的红外结构光图案,然后从被拍摄物体表面反射回来…

【开发篇】十六、SpringBoot整合JavaMail实现发邮件

文章目录 0、相关协议1、SpringBoot整合JavaMail2、发送简单邮件3、发送复杂邮件 0、相关协议 SMTP(Simple Mail Transfer Protocol):简单邮件传输协议,用于发送电子邮件的传输协议POP3(Post Office Protocol - Versi…

Linux上将进程、线程与CPU核绑定

CPU亲和性(CPU Affinity)是某一进程(或线程)绑定到特定的CPU核(或CPU集合),从而使得该进程(或线程)只能运行在绑定的CPU核(或CPU集合)上。进程(或线程)本质上并不与CPU核绑定。每次进程(或线程)被调度执行时,它都可以由其关联列表中的任何CPU核执行。如果…

使用Scipy优化梯度下降问题

目 录 问题重述 附加问题 步骤实施 1.查看Scipy官网SciPy,找到优化有关的模块(Optimize) 2.研究多种优化策略,选择最符合代码的方案进行优化 3.minimize函数参数及其返回值 4.代码展示 5.结果展示 6.进一步优化 6.1对…

CDN网络基础入门:CDN原理及架构

背景 互联网业务的繁荣让各类门户网站、短视频、剧集观看、在线教育等内容生态快速发展,互联网流量呈现爆发式增长,自然也面临着海量内容分发效率上的挑战,那么作为终端用户,我们获取资源的体验是否有提升呢? 答案是…

一文了解硬盘AFR年化故障率评估方式和预测方案

目前常用评价硬盘(或者其他硬件产品)有一个关键的指标就是年化故障率(AFR)。年化故障率(AFR)是一种衡量产品可靠性的指标,表示在一年内产品发生故障的概率。 除了年化故障率(AFR&…

Netron可视化深度学习网络结构

有时候,我们构建网络模型想要直观的查看网络详细结构图,但是苦于没有办法。但是有了Netron以后,我们就可以将对应的onnx模型直接可视化,这样不仅可以观察网络的详细结构图,还可以查看网络每一层的具体参数,…

【数据结构】排序算法(二)—>冒泡排序、快速排序、归并排序、计数排序

👀樊梓慕:个人主页 🎥个人专栏:《C语言》《数据结构》《蓝桥杯试题》《LeetCode刷题笔记》《实训项目》 🌝每一个不曾起舞的日子,都是对生命的辜负 目录 前言 1.冒泡排序 2.快速排序 2.1Hoare版 2.2占…

C++入门

一、C关键字 C总计63个关键字,C语言32个关键字。 二、命名空间 在C/C中,变量、函数和后面要学到的类都是大量存在的,这些变量、函数和类的名称将都存 在于全局作用域中,可能会导致很多冲突。使用命名空间的目的是对标识符的名称…

谁“动”了我的信息?

通信公司“内鬼” 批量提供手机卡 超6万张手机卡用来发涉赌短信 2023年10月2日,据报道2022年12月,湖北省公安厅“雷火”打击整治治安突出问题专项行动指挥部研判发现,有人在湖北随州利用虚拟拨号设备GOIP发出大量赌博短信。随州市公安局研判…

【最新】如何在CSDN个人主页左侧栏添加二维码?侧边推广怎么弄?

目录 引言 效果展示 步骤讲解 引言 当你决定在CSDN上展示自己的技术才能和项目时,💡 将你的个人主页变得更炫酷和引人注目是必不可少的!在这篇博客中,我们将向你揭开神秘的面纱,教你如何在CSDN个人主页的左侧栏上添…

RabbitMQ集群搭建详细介绍以及解决搭建过程中的各种问题——实操型

RabbitMQ集群搭建详细介绍以及解决搭建过程中的各种问题——实操型 1. 准备工作1.1 安装RabbitMQ1.2 简单部署搭建设计1.3 参考官网 2. RabbitMQ 形成集群的方法3. 搭建RabbitMQ集群3.1 部署架构3.2 rabbitmq集群基础知识3.2.1 关于节点名称(标识符)3.2.…

Java常见API---split()

package daysreplace;public class SplitTest {public static void main(String[] args) {String str"武汉市|孝感市|长沙市|北京市|上海市";String[] array str.split("\\|");System.out.println(array[0]);System.out.println(array[1]);System.out.pri…

【C++】一文带你走入vector

文章目录 一、vector的介绍二、vector的常用接口说明2.1 vector的使用2.2 vector iterator的使用2.3 vector空间增长问题2.4 vector 增删查改 三、总结 ヾ(๑╹◡╹)ノ" 人总要为过去的懒惰而付出代价ヾ(๑╹◡╹)ノ" 一、vector的介绍 vector…

golang gin——文件上传(单文件,多文件)

文件上传 单文件上传 从form-data获取文件 package uploadimport ("github.com/gin-gonic/gin""net/http" ) // 单文件上传,多文件上传 func Upload(c *gin.Context) {file, _ : c.FormFile("file") // file为字段名dst : "…

nodejs开发环境搭建

Nodejs是一个开源的、跨平台JavaScript运行时环境,其使用V8引擎对JavaScript脚本执行解释,在前后端分离的应用架构设计中,其既能支持web页面服务应用的开发、也能支持后端接口服务应用的开发,类似于Java语言的J2EE运行时环境&…

安装matplotlib__pygame,以pycharm调入模块

安装pip 安装matplotlib 安装完毕,终端输入pip list检查 导入模块出现bug,发现不是matplotlib包的问题,pycharm版本貌似不兼容,用python编辑器可正常绘图,pygame也可正常导入。 ​​​​​​​ pycharm版本问题解决 终…

【Spring笔记02】Spring中的IOC容器和DI依赖注入介绍

这篇文章,主要介绍一下Spring中的IOC容器和DI依赖注入两个概念。 目录 一、IOC控制反转 1.1、什么是IOC 1.2、两种IOC容器 (1)基于BeanFactory的IOC容器 (2)基于ApplicationContext的IOC容器 二、DI依赖注入 2.…

stm32-SPI协议

SPI协议详解(图文并茂超详细) SPI通讯协议 于是我们想有没有更好一点的串行通讯方式;相比较于UART,SPI的工作方式略有不同。 SPI是一个同步的数据总线,也就是说它是用单独的数据线和一个单独的时钟信号来保证发送端和…