社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Python

【Python】Python打包成 exe,太大了该怎么解决?

机器学习初学者 • 2 周前 • 124 次点击  
知乎上有人问,Python打包成exe,太大了该怎么解决?

首先要知道Python打包exe为什么这么大?

我猜你一定是用PyInstaller打包exe的,PyInstaller特点是将乱七八糟的东西打包一起,比如各种依赖库,即使你的程序只使用了pandas很小一个功能,比如read_data,它也会将整个pandas打包,这就导致出来的exe文件非常的大。

还有PyInstaller会打包Python解释器,方便在没有python的机器上运行python,而Python解释器本身就很大,包含了很多标准库,有二三十兆。这其实是不必要的负担,对于一个exe文件来说。

那如何解决这个问题呢?有两种方案。

第一种,优化PyInstaller打包过程,既然它把什么乱七八糟的都放进去了,我们来做个断舍离,使用.spec文件自定义打包配置。

.spec文件是PyInstaller在打包exe程序时生成的配置文件,包含了所有配置信息,像脚本路径、依赖库、资源文件、打包选项等,可以通过修改.spec文件,来精简不必要的依赖。

首先将待打包的py文件放进.spec文件里

pyi-makespec your_script.py

然后编辑.spec文件,剔出不必要的依赖库。

# your_script.spec
a = Analysis(
    ['your_script.py'],
    pathex=['/path/to/your/script'],
    binaries=[],
    datas=[],
    hiddenimports=[],
    hookspath=[],
    runtime_hooks=[],
    excludes=['unnecessary_library'],  # 排除不必要的库
    win_no_prefer_redirects=False,
    win_private_assemblies=False,
    cipher=block_cipher,
)

最后再用PyInstaller打包.spec文件,变成exe。

pyinstaller your_script.spec

但这种方法打包出来的exe还是会偏大,虽然剔除了不必要的依赖库,但是python解释器和用到的库还是会被打包进来,这就是比较烦。

接下来是第二种方法,使用Nuitka来打包exe文件,Nuitka会Python代码编译为C代码,生成更小的二进制文件,这样就没有各种依赖库和Python解释器一起打包的困扰了。

Nuitka用起来很简单。

pip install nuitka
nuitka --standalone --onefile your_script.py

接下来是案例,我用AI写了一个简单的Python应用-胎儿体重计算器,通过几个产检参数计算胎儿的体重,UI实现出来大概如下这样。

这个程序使用Python tkinter实现的,这是Python的标准库。使用PyInstaller打包出来的exe文件大小10.3MB。

接下来使用Nuitka打包出来的exe文件大小7.65MB,比PyInstaller小了35%,算是不错了,因为这个程序并没有用到第三方库。

如果是打包更加复杂的程序,软件的大小会进一步压缩,Nuitka的优势会更明显。




    
往期精彩回顾




  • 交流群

请备注:”昵称-学校/公司-研究方向“,例如:”张小明-浙大-CV“加群。

也可以加入机器学习交流qq群772479961


Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/177711
 
124 次点击