赞
踩
写在前面:要是本工具好用一定记得点赞收藏哦!!!
前排推荐,关于nuitka与pyinstaller结合的打包新姿势,欢迎前往查看哦
使用pyinstaller配合nuitka打包,发布python程序
下面开始正题
目录
众所周知,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 字节),可以直接删除。
还能继续减小程序体积,那就是借助另外的工具将程序制作成单文件启动(其实就成了一个压缩包),但是,我不建议大家将程序发布为单文件程序。单文件程序实际上是一种压缩包,程序在运行的时候,会首先解压自己到系统的临时文件夹中,这不仅仅增加了额外的启动时间,同时解压时释放多个二进制文件极易被杀毒软件误杀,此外还有程序文件路径的改变导致某些代码找不到需要的文件等问题。
pyinstaller及nuitka均有onefile选项,如果在打包的时候就选择onefile,打包后的程序若缺文件就没法弥补,且无法使用本工具来缩减体积。
若的确有需要制作单文件程序,推荐打包后使用其他工具制作单文件程序启动。
最后分享本文所提到的工具
由于本人所使用的第三方库仅仅是冰山一角,打包经验也欠缺,所以目前的white_files.json所记录的文件白名单还很欠缺,需要大家根据自己的使用情况按需添加。
工具目前还不够完善,对于有些文件,是程序必须的,但是又在程序运行时不占用的,就需要将文件名加入白名单列表中。程序第一次运行,会自动生成white_files.json文件,该文件记录了工具运行时不移动的文件,请根据使用情况酌情添加。
本工具目前仅在win7/win11测试过,其余平台谨慎使用。
如果觉得好用请不要忘记点赞哦
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。