瘦身秘籍:如何使用 PyInstaller 打造超小型 Python 可执行文件

news2024/11/18 17:28:27

你是否曾经尝试过将你的 Python 程序打包成一个可执行文件,却发现生成的文件大得惊人?别担心,本文将教你如何使用 PyInstaller 尽可能减小生成的 onefile 大小,让你的程序轻盈如风!

1. 使用虚拟环境

首先,我们需要在虚拟环境(virtual environment)中安装我们的程序及其依赖项。这样做的好处是可以避免打包不必要的库,从而减小最终文件的大小。

python -m venv my_venv
source my_venv/bin/activate  # 在 Windows 上使用 my_venv\Scripts\activate
pip install -r requirements.txt

2. 仅打包必要的库

确保 requirements.txt 文件仅包含你的程序所需的库。这样,在打包过程中,PyInstaller 只会包含这些库,从而减小文件大小。

3. 使用 --onefile 选项

PyInstaller 的 --onefile 选项可以将所有文件打包成一个单独的可执行文件。这是一个很好的选择,因为它可以让你更方便地分发你的程序。

pyinstaller --onefile my_script.py

4. 使用 --strip 选项

使用 --strip 选项可以从可执行文件中删除符号信息,从而减小文件大小。这对于发布版本特别有用。

pyinstaller --onefile --strip my_script.py

5. 使用 --noconsole 选项

如果你的程序没有控制台窗口,可以使用 --noconsole 选项。这将减小生成的可执行文件的大小。

pyinstaller --onefile --noconsole my_script.py

6. 使用 --exclude-module 选项

如果你知道某些库对你的程序来说是不必要的,可以将它们排除在打包过程之外。

pyinstaller --onefile --exclude-module numpy my_script.py

7. 使用 UPX 压缩

UPX 是一个可执行文件压缩器,可以减小生成的可执行文件的大小。要使用 UPX,你需要先下载并安装它,然后在 PyInstaller 命令中使用 --upx-dir 选项指定 UPX 的路径。

pyinstaller --onefile --upx-dir=path/to/upx my_script.py

8. 添加额外数据文件

如果你的程序需要额外的数据文件,可以使用 --add-data 选项将它们添加到打包过程中。这样可以避免将整个文件夹打包到可执行文件中。

pyinstaller --onefile --add-data="data_file.txt;data" my_script.py

9. 为你的程序添加图标

最后,使用 --icon 选项为你的可执行文件添加一个图标,使其看起来更专业。

pyinstaller --onefile --icon=my_icon.ico my_script.py

打包可能存在的闪退问题:

如果是pandas读取excel,就会出现闪退:

pyinstaller -F -w -i ./favicon.ico app/app.py

app.exe > error_log.txt

上面可以查看闪退时的CMD错误。

遵循以上步骤,你应该能够使用 PyInstaller 生成一个非常小的 onefile 可执行文件。但请注意,生成的可执行文件可能会因为压缩和优化而运行速度较慢。在实际使用中,可以根据需求权衡文件大小和运行速度。
在这里插入图片描述

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

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

相关文章

边循环边删除List中的数据

List边循环,边删除;这种一听感觉就像是会出问题一样,其实只要是删除特定数据,就不会出问题,你如果直接循环删除所有数据,那可能就会出问题了,比如: public static void main(String[…

基于RK1126的小型化低功耗AI相机,支持人体特征识别、人脸特征识别、案例帽识别等

提供可定制的⼀套 AI相机软硬件开发平台, 硬件采⽤ RockchipRV1126处理器解决 ⽅案,可选择搭配 SonyIMX系列传感器,POE供电与数据传输,采⽤ 38板标准结构设计,快速按需定制外壳,⽀撑从开发到验证到批量⽣产…

Redis集群模式:高可用性与性能的完美结合!

【更多精彩内容,欢迎关注小米的微信公众号“软件求生”】 大家好,我是小米,一个积极活泼、喜好分享技术的29岁程序员。今天我们来聊聊Redis的集群模式,以及它是如何实现高可用的。 什么是Redis集群模式? Redis的集群模式是为了避免单一节点负载过高导致不稳定的一种解决…

Windows之隐藏特殊文件夹(自定义快捷桌面程序)

作者主页:点击! 创作时间:2024年5月1日12点55分 祝大家劳动节快乐~ Windows中的特殊文件夹是指一些预定义的文件夹,用于存储特定类型的数据或文件。这些文件夹通常由操作系统或应用程序使用,但用户也可以访问和管理它…

java序列化和反序列化基础学习

一、前言 前文分析了java的反序列化的DNSURL利用链,但是对于java反序列化的一些过程不是很了解,这篇主要记录下学习java反序列基础知识 二、原理 概念 1、什么是序列化和反序列化 (1)Java序列化是指把Java对象转换为字节序列…

24 JavaScript学习:this

this在对象方法中 在 JavaScript 中,this 的值取决于函数被调用的方式。在对象方法中,this 引用的是调用该方法的对象。 让我们看一个简单的例子: const person {firstName: John,lastName: Doe,fullName: function() {return this.firstN…

element的textarea字体与input字体不一致解决方案

实现 <style scoped> .el-textarea /deep/ .el-textarea__inner{font-family: "Helvetica Neue",Helvetica,"PingFang SC","Hiragino Sans GB","Microsoft YaHei","微软雅黑",Arial,sans-serif; } </style>效…

【Flutter】极光推送配置流程(小米厂商通道) 章二

前言 继【Flutter】极光推送配置流程(极光通道/华为厂商/IOS) 章一 并且&#xff0c;我大概率不会去修改第一篇文章的内容。 随着我自己在配置公司的项目的同时&#xff0c;我希望一直更新这个推送系列文章。 在章一配置完后&#xff0c;也是出现了一些问题&#xff0c;所以本…

【IC设计】CRC(循环冗余校验)

目录 理论解读CRC应用CRC算法参数解读常见CRC参数模型 设计实战校招编程题分类串行输入、并行计算、串行输出**串行计算、串行输出&#xff08;线性移位寄存器&#xff09;LSFR线性移位寄存器&#xff08;并转串&#xff09;(并行计算)模二除 总结——串行、并行计算的本质参考…

nowcoder——删除公共字符

删除公共字符_牛客题霸_牛客网 (nowcoder.com) 对于这个题其实就是删除字符串1中在字符串2中出现过的字符。我们来分析下解题步骤&#xff1a; 思路一&#xff1a;遍历字符串1&#xff0c;如果遍历到的字符在字符串2中出现&#xff0c;则将该字符之后的所有字符向前移一位。 …

[高质量]2024五一数学建模A题保奖思路+代码(后续会更新)

你的点赞收藏是我继续更新的最大动力&#xff0c;可点击文末卡片获取更多资料 你是否在寻找数学建模比赛的突破点&#xff1f; 作为经验丰富的数学建模团队&#xff0c;我们将为你带来2024 年华东杯&#xff08;A题&#xff09;的全面解析包。这个解决方案包不仅包括完整的代…

[C语言]典型例题:小蚂蚁爬橡皮筋、买汽水问题、导致单词块、菱形打印……

1、小蚂蚁爬橡皮筋问题 假设橡皮筋长4m&#xff0c;小蚂蚁从一端爬向另一端每天爬1m&#xff0c;且每爬了1m&#xff0c;橡皮筋会立马拉伸4m&#xff0c;在理想条件下&#xff0c;小蚂蚁需要爬多少天可以到达橡皮筋的另一端&#xff1f; 不仔细想&#xff0c;我们很可能认为小蚂…

LeetCode 543.二叉树的直径

题目描述 给你一棵二叉树的根节点&#xff0c;返回该树的 直径 。 二叉树的 直径 是指树中任意两个节点之间最长路径的 长度 。这条路径可能经过也可能不经过根节点 root 。 两节点之间路径的 长度 由它们之间边数表示。 示例 1&#xff1a; 输入&#xff1a;root [1,2,3,4,5]…

5个Python自动化EDA库

EDA或探索性数据分析是一项耗时的工作&#xff0c;但是由于EDA是不可避免的&#xff0c;所以Python出现了很多自动化库来减少执行分析所需的时间。EDA的主要目标不是制作花哨的图形或创建彩色的图形&#xff0c;而是获得对数据集的理解&#xff0c;并获得对变量之间的分布和相关…

OpenFeign修改HttpClient为Apache HttpClient 5

OpenFeign中http client 如果不做特殊配置&#xff0c;OpenFeign默认使用JDK自带的HttpURLConnection发送HTTP请求&#xff0c; 由于默认HttpURLConnection没有连接池、性能和效率比较低。所以修改为Apache HttpClient 5。 总结为两步&#xff1a; 加依赖改yml 具体操作请往…

uniapp + uView动态表单校验

项目需求&#xff1a;动态循环表单&#xff0c;并实现动态表单校验 页面&#xff1a; <u--form label-position"top" :model"tmForm" ref"tmForm" label-width"0px" :rulesrules><div v-for"(element, index) in tmForm…

基于Springboot+Vue的Java项目-家政服务平台系统开发实战(附演示视频+源码+LW)

大家好&#xff01;我是程序员一帆&#xff0c;感谢您阅读本文&#xff0c;欢迎一键三连哦。 &#x1f49e;当前专栏&#xff1a;Java毕业设计 精彩专栏推荐&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb; &#x1f380; Python毕业设计 &am…

如果通过Glide 设置图片圆角

要给图片设置一个圆角,通常方法是在ImageView 标签外添加一个CardView 标签,然后设置圆角值,但是今天遇到一个问题就是 RecyclerView Item 中这样操作的话会遇到这样的一个报错: Cannot call this method while RecyclerView is computing a layout or scrolling androidx.rec…

数据结构----顺序表详解

顺序表的定义 顺序表&#xff08;SeqList&#xff09;属于线性表的同一种&#xff0c;它同样具有线性的存储结构&#xff0c;以下是百度百科关于顺序表的定义&#xff1a; 总结下来&#xff0c; 在结构上&#xff0c;顺序表实际上的底层结构就是数组&#xff0c;而顺序表本身也…

链表-----返回倒数第K个节点回文结构的判断相交链表

目录 1.返回倒数第K个节点 2.回文结构的判断 3.相交链表的判断&#xff0c;返回交点 1.返回倒数第K个节点 &#xff08;1&#xff09;返回链表的第k个节点&#xff0c;我们这里的做法是定义两个指针&#xff0c;这两个指针之间相差的是k这个长度&#xff1b;这个过程的实现就…