Pyinstaller打包python文件太大?教你三个小技巧有效减小文件体积

news2024/11/19 12:40:09

简介

有时候需要在未安装Python环境的平台上运行py程序,使用pyinstaller打包很方便,但打包后的可执行文件实在是太大了。原因在于打包时pyinstaller本就已经关联了很多的python内联模块,加上我们项目中存在过多第三方类库,打包的时候又会引入一些不必要的类库,导致打包出来的程序变的很大。

解决方法

1.使用upx压缩

打包的时候使用UPX压缩文件。那么UPX是什么呢?UPX是一款非常不错的程序文件压缩工具,使用upx压缩过的可执行文件体积缩小50%-70% ,可以大大减少了磁盘占用空间。

如果没有下载过upx,那我们每次使用pyinstaller把python文件打包成exe可执行程序时都能看到下面这句提示,UPX is not available,也就是upx不可用。

那upx怎么和pyinstaller配合使用呢

我们需要先下载UPX执行文件,可以自己去搜或者在https://upx.github.io/里面下载自己想要的版本,下载下来的是一个压缩包,我们只需要解压后把里面的upx.exe文件复制到pyinstaller.exe同个文件夹(应该是Scripts文件夹)内即可。

pyinstaller默认会从执行目录里搜索upx执行文件,如果找到upx,会对生成的可执行文件进行压缩。现在我们重新执行pyinstaller打包命令,如果像下图这样就说明使用upx配置成功

简介

有时候需要在未安装Python环境的平台上运行py程序,使用pyinstaller打包很方便,但打包后的可执行文件实在是太大了。原因在于打包时pyinstaller本就已经关联了很多的python内联模块,加上我们项目中存在过多第三方类库,打包的时候又会引入一些不必要的类库,导致打包出来的程序变的很大。

解决方法

1.使用upx压缩

打包的时候使用UPX压缩文件。那么UPX是什么呢?UPX是一款非常不错的程序文件压缩工具,使用upx压缩过的可执行文件体积缩小50%-70% ,可以大大减少了磁盘占用空间。

如果没有下载过upx,那我们每次使用pyinstaller把python文件打包成exe可执行程序时都能看到下面这句提示,UPX is not available,也就是upx不可用。

那upx怎么和pyinstaller配合使用呢

我们需要先下载UPX执行文件,可以自己去搜或者在https://upx.github.io/里面下载自己想要的版本,下载下来的是一个压缩包,我们只需要解压后把里面的upx.exe文件复制到pyinstaller.exe同个文件夹(应该是Scripts文件夹)内即可。

pyinstaller默认会从执行目录里搜索upx执行文件,如果找到upx,会对生成的可执行文件进行压缩。现在我们重新执行pyinstaller打包命令,如果像下图这样就说明使用upx配置成功

显示UPX 可用

可以看到,下面是两个分别是使用了upx压缩和没有使用upx压缩的exe

文件大小对比

因为文件本身不大,所以看不出来太大差别。但如果是200M的文件,估计压缩效果很大。


2.使用虚拟环境

用pipenv创建python虚拟环境。因为在打包环境下会引入了很多不必要的文件,一块打包会导致在生成exe文件过大,而在虚拟纯净环境里打包程序可以有效避免。

步骤1:首先在需要作为虚拟环境的文件夹内执行pip install pipenv命令

步骤2:在安装成功后使用pipenv shell命令,进入虚拟环境

步骤3:进入虚拟环境后,先使用pipenv install pyinstaller安装pyinstaller(这是在虚拟环境内安装,和外面环境安装的互不干涉)

步骤4:安装你python文件需要的库,安装命令是pipenv install 包名,和原来pip安装库的命令差不多,但要注意不是pip是pipenv

最后,就可以在虚拟环境内使用pyinstaller+文件名 进行打包了,打包好的exe程序在当前目录下的dist文件夹内。

3.使用魔法

因为在打包的过程中,我眼睁睁看着那些我根本没有用到的模块却被引入了程序中,就想着把源码中没有用到的模块全卸载了,然后再执行打包程序。结果发现有奇效!还真是麻雀啄牛屁股,开了眼了

显示UPX 可用

可以看到,下面是两个分别是使用了upx压缩和没有使用upx压缩的exe

文件大小对比

因为文件本身不大,所以看不出来太大差别。但如果是200M的文件,估计压缩效果很大。


2.使用虚拟环境

用pipenv创建python虚拟环境。因为在打包环境下会引入了很多不必要的文件,一块打包会导致在生成exe文件过大,而在虚拟纯净环境里打包程序可以有效避免。

步骤1:首先在需要作为虚拟环境的文件夹内执行pip install pipenv命令

步骤2:在安装成功后使用pipenv shell命令,进入虚拟环境

步骤3:进入虚拟环境后,先使用pipenv install pyinstaller安装pyinstaller(这是在虚拟环境内安装,和外面环境安装的互不干涉)

步骤4:安装你python文件需要的库,安装命令是pipenv install 包名,和原来pip安装库的命令差不多,但要注意不是pip是pipenv

最后,就可以在虚拟环境内使用pyinstaller+文件名 进行打包了,打包好的exe程序在当前目录下的dist文件夹内。

3.使用魔法

因为在打包的过程中,我眼睁睁看着那些我根本没有用到的模块却被引入了程序中,就想着把源码中没有用到的模块全卸载了,然后再执行打包程序。结果发现有奇效!还真是麻雀啄牛屁股,开了眼了

文章转载于Pyinstaller打包python文件太大?教你三个小技巧有效减小文件体积 - 知乎

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

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

相关文章

优思学院|质量人如何利用ChatGPT提升工作效率?

在许多人知道怎么用ChatGPT之后,不少人开始思考如何利用这个工具来提升自己的工作效率。 质量人也不例外,在质量管理中,有许多重复的任务需要人手去完成。这些任务可能包括检查文档、审查流程、跟踪错误等。这些任务既耗费时间,又…

MAVEN环境变量配置(Windows 11)

1、直接在搜索框中搜:编辑系统环境变量 2、点击环境变量 3、 在系统变量里面新建系统变量 变量名:MAVEN_HOME 变量值:路径一定要写到maven的bin目录下 以下这种写法是错误的 4、新建系统变量完成 5、 往下滑 找到path,可以双击…

【Python】实战:生成无关联单选问卷 csv《跌倒风险评估量表》

目录 一、适用场景 二、业务需求 三、Python 文件 (1)创建文件 (2)代码示例 四、csv 文件 一、适用场景 实战场景: 问卷全部为单选题问卷问题全部为必填问题之间无关联关系每个问题的答案分数不同根据问卷全部问…

亚马逊云科技CodeWhisperer正式可用,面向个人开发者免费开放

亚马逊云科技致力于推动生成式AI技术的普惠化:亚马逊云科技将这些技术从研究和实验领域释放出来,不只是少数初创公司和资金雄厚的大型科技公司,而是让更多公司都能从中受益。因此,亚马逊云科技宣布数项创新,帮助客户更…

STM32-HAL-usDelay

一、STM32单片机的延时 STM32单片机的延时,是指在程序中暂停一段时间,等待一定的时间后再继续执行下一条指令。常见的延时方式有循环延时和定时器延时。 毫秒延时的使用场景: 等待外设完成某项操作:在使用外设时,有…

【安全与风险】总结篇

总结篇 期望学习效果学习关键点安全基础一些术语安全策略CIA 密码学概论对称vs非对称对称密码:定义非对称密码学(公钥密码学)密钥生成加密解密技术反向使用:数字签名 基础计算资源安全访问控制列表读、写、执行权限位DoS攻击 恶意软件什么是恶意软件恶意软件的类型基于主机的恶…

SpringBoot中集成任务调度

文章目录 SpringBoot中集成任务调度1. 任务调度基本介绍2. corn表达式介绍2-1 corn的每一个位置功能介绍2-2 占位符说明2-3 常用cron举例 3. SpringBoot项目中,集成任务调度Scheduled3-1 添加SpringBoot启动依赖3-2 具体corn任务调度计划3-3 SpringBoot启动类添加注…

java如何实现深拷贝(IT枫斗者)

java如何实现深拷贝 Java浅拷贝 浅拷贝是按位拷贝对象,它会创建一个新对象,这个对象有着原始对象属性值的一份精确拷贝。如果属性是基本类型,拷贝的就是基本类型的值;如果属性是内存地址(引用类型)&#…

2016湖南湘潭邀请赛b题思路

最近训练时写的比赛,当时b题没写,事后补一下,看了下题解,想写下自己的解释 原题解:2016湖南湘潭邀请赛题解:2016年“长城信息”杯中国大学生程序设计比赛中南地区邀请赛(迟来的题解&#xff09…

Koordinator 一周年,新版本 v1.2.0 支持节点资源预留,兼容社区重调度策略

作者:佑祎、吕风 背景 Koordinator 是一个开源项目,基于阿里巴巴在容器调度领域多年累积的经验孵化诞生,可以提升容器性能,降低集群资源成本。通过混部、资源画像、调度优化等技术能力,能够提高延迟敏感的工作负载和…

第3章:select

1.最基本的select语句 select … from…select 字段1,字段2,…from 表名* 表中所有字段(列) 2.列的别名 字段1 as 别名1字段1 别名1as:alias(别名)可以省略如果别名有空格使用一对””引起来…

应用于音箱领域中的音频功放IC型号推荐

音箱音频功放ic俗称“扩音机”又叫音频功率放大器IC;是各类音响器材中不可缺少的部分,其作用主要是将音源器材输入的较微弱信号进行放大后,产生足够大的电流去推动扬声器进行声音的重放。 现如今,音频功放芯片伴随着人工交互及智…

APS中零件工序间的移动方式解析

在加工装配的成批生产类型企业里,由于零件多种多样,工艺路线、加工方法和技术装备千差万别,因而,产品有多种流转方式。一般来说,零件在各道工序间的移动方式主要有顺序移动、平行移动和平行顺序(平顺&#…

网络威胁情报:数据的力量

在一个日益互联和数字化的世界中,网络威胁已成为一项重大挑战,可能危及您组织的声誉、财务稳定性和整体运营效率。 事实上,根据 IBM 2022 年的一份报告,数据泄露的平均成本现在为 435 万美元。 鉴于网络威胁的重要性和影响日益突…

Spring《三》DI 依赖注入

🍎道阻且长,行则将至。🍓 上一篇:Spring《二》bean 的实例化与生命周期 下一篇:敬请期待 目录 一、setter 注入🍉1.注入引用数据类型2.注入简单数据类型 二、构造器注入🍊1.注入引用数据类型2.…

吴恩达团队AI诊断心律失常研究:准确率超人类医生

2019年,吴恩达团队在AI医疗领域实现了一项革命性的突破,他们成功地让AI诊断心律失常,其准确率高达83.7%,超过了人类心脏病医生的78.0%。这项研究成果已经发表在了知名期刊Nature Medicine上。 一、如何让AI学会诊断心律失常&…

Linux多媒体子系统02:V4L2核心框架分析

1 V4L2框架结构概述 1.1 imx8视频输入通路硬件结构 软件框架是对硬件结构的映射与描述,所以在说明V4L2框架结构之前先说明一下硬件结构,此处以imx8视频输入通路为例(下图中红框部分) 1. MIPI-CSI2(Camera Serial Int…

测试Ocr工具IronOCR(续:编写图片圈选程序)

上一篇文章学习了IronOCR的基本用法之后,计划做一个加载本地图片后,从图片中圈选某一位置的文字,然后调用IronOCR识别圈选区域文本的程序。本文实现从本地加载图片并完成圈选的功能。   主要的功能包括以下几点:   1&#xff…

提效降本应对无序竞争,采埃孚+东软睿驰的组合样本

降价与降本,就好似车企与供应商之间的“窗户纸”;如果是持续的无序竞争,势必一捅就破。而只有通过产业链的通力协作,才有机会维持一定的平衡。 多元化需求、车企降本、新车开发周期缩短等一系列因素,正在驱动智能化在中…

Spring Security实现JWT token验证

Spring Security实现JWT token验证 Spring Security是Spring提供的一个安全框架,提供认证和授权功能,最主要的是它提供了简单的使用方式,同时又有很高的灵活性,简单、灵活、强大 一般系统里关于角色方面通常有这么几张表&#xf…