pyinstaller/nuitka打包后程序瘦身工具

写在前面:要是本工具好用一定记得点赞收藏哦!!!

 前排推荐,关于nuitka与pyinstaller结合的打包新姿势,欢迎前往查看哦

使用pyinstaller配合nuitka打包,发布python程序

下面开始正题

目录

引言

脚本运行原理

使用方法

瘦身效果

瘦身示例

示例代码

开始瘦身

关于onefile

工具源代码

注意事项

使用平台

代码如下

引言

众所周知,python程序打包后的体积相比其他编程语言明显大得多,这主要有以下几个方面的原因。

1,pyinstaller或者nuitka,在打包时都会把python解释器包含在内,这个解释器本身就十几二十兆大小。

2,众多的第三方库,在实现大量的功能需求的同时,也包含了大量的代码及资源文件,而大部分时候我们的程序仅仅只用到了某个库1%的功能,却需要打包一整个库来保证程序的正常运行。

本文基于上述第2点,寻找了一种方式,通过脚本操作,来移除打包后的文件夹内,程序运行不需要的文件,达到打包瘦身的效果。

脚本运行原理

工具通过指定文件目录,来移动该目录下未被程序占用的文件,移动的文件会在指定文件目录外的"目录_new"里面,同时生成文件移动清单.txt

使用方法

运行自己打包好的程序,尽量功能全开的情况下,使用本工具,指定程序目录,工具开始移动未占用的文件。移动结束后,请再运行一遍自己的程序,如果提示文件缺少,可以从《文件移动清单.txt》去找,还原即可。

瘦身效果

根据我的历史使用记录,本工具针对pyinstaller打包的程序能缩小体积50%左右,针对nuitka打包的程序能缩小体积30%左右。

下面来举例说明,本工具的使用效果如何:

瘦身示例

示例代码

import numpy as np
import matplotlib.pyplot as plt

# 使用numpy生成二维正态分布的随机数据
np.random.seed(0)  # 设置随机种子以保证结果可复现
x = np.random.randn(100)
y = np.random.randn(100)

# 使用matplotlib绘制散点图
plt.scatter(x, y, color='blue', marker='o')  # 散点图

# 设置图表标题和坐标轴标签
plt.title('2D Gaussian Random Scatter Plot')
plt.xlabel('X-axis')
plt.ylabel('Y-axis')

# 将图形保存为PNG文件
plt.savefig('scatter_plot.png', dpi=300)  # 设置分辨率(dpi)
plt.close()
input("运行结束,按回车键继续")

这是一个很常见的绘图代码,使用numpy处理数据,使用matplotlib绘制二维散点图,最后生成png图片。

这样一个程序,在干净的虚拟环境里,使用pyinstaller打包,多文件模式,启用UPX。

打包完成后,程序体积为40.1 MB (42,111,603 字节),其中_internal文件夹 35.0 MB (36,737,722 字节)。运行程序,程序正常运行,生成了png文件。

开始瘦身

现在使用本文所推荐的工具,给打包后的文件夹瘦身。步骤如下:

1,运行刚刚打包的程序,不要点回车,等程序停在那儿。

2,运行本文所推荐的工具,点击目标文件夹按钮,选择刚刚打包完成的文件夹(_internal),点击开始处理按钮,当工具弹出“文件移动结束”窗口时,代表工具运行结束。

3,此时打开打包的文件夹,目录如下:

本工具在所选定的目录外面,生成了_new文件夹,并且将程序运行不需要的文件,在保持原有目录结构的情况下,移动到了这里。

文件移动清单.txt,该文件详细记录了每个移动文件的原有目录信息。

4,按回车,关闭刚刚停在那里的程序,删除scatter_plot.png文件。

5,重新运行main.exe,又一次生成了scatter_plot.png,在测试程序所有功能后,程序运行正常,此时可认为本次瘦身优化成功。

6,查看打包的程序文件夹,_internal文件夹由35MB变为了17.3 MB ,而本工具移除的文件体积_internal_new文件夹的大小则达到了17.7 MB (18,562,889 字节),可以直接删除。

关于onefile

还能继续减小程序体积,那就是借助另外的工具将程序制作成单文件启动(其实就成了一个压缩包),但是,我不建议大家将程序发布为单文件程序。单文件程序实际上是一种压缩包,程序在运行的时候,会首先解压自己到系统的临时文件夹中,这不仅仅增加了额外的启动时间,同时解压时释放多个二进制文件极易被杀毒软件误杀,此外还有程序文件路径的改变导致某些代码找不到需要的文件等问题。

pyinstaller及nuitka均有onefile选项,如果在打包的时候就选择onefile,打包后的程序若缺文件就没法弥补,且无法使用本工具来缩减体积。

若的确有需要制作单文件程序,推荐打包后使用其他工具制作单文件程序启动。

工具源代码

最后分享本文所提到的工具

由于本人所使用的第三方库仅仅是冰山一角,打包经验也欠缺,所以目前的white_files.json所记录的文件白名单还很欠缺,需要大家根据自己的使用情况按需添加。

注意事项

工具目前还不够完善,对于有些文件,是程序必须的,但是又在程序运行时不占用的,就需要将文件名加入白名单列表中。程序第一次运行,会自动生成white_files.json文件,该文件记录了工具运行时不移动的文件,请根据使用情况酌情添加。

使用平台

本工具目前仅在win7/win11测试过,其余平台谨慎使用。

工具获取地址

打包瘦身工具

如果觉得好用请不要忘记点赞哦

视频演示

python打包程序瘦身_哔哩哔哩_bilibili

  • 15
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
如果使用PyInstaller的`-w`选项打包完成后程序无法运行,可能是因为程序缺少一些必要的依赖项,或者是因为`-w`选项在某些情况下会导致程序无法正常运行。 以下是一些可能的解决方案: 1. 添加缺少的依赖项 使用`-w`选项打包程序可能会导致一些依赖项无法被自动检测到和打包,因此需要手动添加这些依赖项。可以使用`--add-data`选项或`--add-binary`选项来添加缺失的依赖项。例如: ``` pyinstaller -w --add-data "path/to/dependency;dependency" your_script.py ``` 其中,`path/to/dependency`是依赖项的路径,`dependency`是依赖项在打包程序中的路径。 2. 使用虚拟环境 在打包程序之前,建议使用虚拟环境来避免依赖项冲突。可以使用`virtualenv`或`conda`等工具来创建虚拟环境,并在虚拟环境中安装程序所需的依赖项。 3. 不使用`-w`选项 如果使用`-w`选项打包程序无法正常运行,可以尝试不使用该选项来打包程序。这样打包后的程序会显示一个黑色的控制台窗口,但可以容易地定位和解决问题。 4. PyInstaller版本 如果以上方法都无法解决问题,可以尝试PyInstaller版本。可能存在一些已知问题,这些问题在新版本中已经得到了修复。可以使用以下命令来PyInstaller: ``` pip install --upgrade pyinstaller ``` 以上是一些可能的解决方案,如果问题仍然存在,建议查看PyInstaller的官方文档或向PyInstaller社区寻求帮助。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值