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)…

SpringCloud(37):Spring Cloud Alibaba 综合集成架构演示

Spring Cloud是一个较为全面的微服务框架集,集成了如服务注册发现、配置中心、消息总线、负载均衡、断路器、API网关等功能实现。而在网上经常会发现Spring Cloud与阿里巴巴的Dubbo进行选择对比,这样做其实不是很妥当,前者是一套较为完整的架构方案,而Dubbo只是服务治理与R…

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

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

leetcode 热题 100

数组和字符串匹配 子串和子序列 原串:“abcabc” 子串:“abc”, 连续但不大于原串的字符串 子序列:“acc”, 字符来自原串且保持在原串中顺序不变的字符串 子排列: “aabbcc”, 字符来自原串且只能用1次,但可有不同排列顺序的字…

【开发篇】十六、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对…

【C++ Efficiency】理解虚函数、多重继承、虚基类和RTTI

虚函数 虚函数的实现 当调用一个虚函数时,一般都是使用了virtual table和virtual table pointer,简称vtbl和vptr: vtbl 一个函数指针数组。 在程序中,一个类凡是声明或继承了虚函数,都有一个vtbl,是指…

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

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

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

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

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

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

简述 AOP 动态代理

一、AopAutoConfiguration 源码: Configuration(proxyBeanMethods false) ConditionalOnProperty(prefix "spring.aop", name "auto", havingValue "true", matchIfMissing true) public class AopAutoConfiguration {Configur…

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

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

C++入门

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

谁“动”了我的信息?

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

蓝桥等考Python组别十三级004

第一部分:选择题 1、Python L13 (15分) 运行下面程序,输出的结果是( )。 t = (0, 1, 2, 3, 4) print(t[3]) 1234正确答案:C 2、Python L13 (15分) 运行下

【最新】如何在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…

解决recovery页面反转的问题

1.前言 在android 10.0的系统rom定制化开发工作中,在系统中recoverv的页面也是相关重要的一部分,在系统recovery ta升级等功能,都是需要recoverv功能的,在某些产品定制化中 在recovery的时候,发现居然旋转了180度&…