AWS Lambda Python依赖超250MB解压上限 如何裁剪仅打包所需功能
AWS Lambda Python依赖包250MB解压上限解决方案
报错原文:Resource handler returned message: "Unzipped size must be smaller than 262144000 bytes"
该报错为AWS Lambda的硬性限制:函数代码+所有依赖解压后的总大小不得超过250MB。你当前场景中sklearn、geopy仅需使用单个函数,可通过以下方式实现按需打包,大幅压缩依赖体积:
一、针对单函数依赖的定向裁剪
sklearn裁剪方案
- 若使用的是无强耦合的独立函数(如
sklearn.metrics.pairwise.cosine_similarity),直接从sklearn开源源码中提取该函数的实现代码,剥离冗余依赖后存入本地项目的工具文件中,完全移除requirements.txt中的sklearn依赖,可减少70MB+的占用 - 若函数依赖少量sklearn基础组件,安装时添加
--no-deps参数,安装完成后手动删除site-packages/sklearn目录下所有未用到的子模块(如分类、回归、预处理、测试样例等目录),裁剪后体积可压缩到5MB以内
geopy裁剪方案
- 绝大多数场景下geopy的单个使用函数(如
geopy.distance.geodesic、地址解析单接口)无复杂依赖,直接提取源码到本地项目即可,移除requirements.txt中的geopy依赖,可减少5MB左右的占用
二、全依赖通用精简步骤
针对你给出的requirements.txt内容netCDF4 numpy==1.20.2 pandas shapely sklearn uuid datetime geopy,可先做基础优化:
- 删除标准库依赖:
uuid、datetime为Python内置标准库,无需写入requirements.txt,避免不必要的安装逻辑 - 安装时使用精简参数:执行依赖安装命令时添加
--no-cache-dir参数,避免下载缓存文件,示例命令:pip install -r requirements.txt --no-cache-dir --target ./python - 安装完成后清理冗余文件:删除
./python目录下所有.pyc文件、__pycache__目录、doc文档、test测试用例、example示例目录,可额外减少30%左右的依赖体积 - 替换重依赖:如果pandas仅用到基础表格处理能力,可替换为轻量的
polars-lts-cpu,体积减少60%以上;也可直接引用AWS官方预构建的公共Lambda层(如pandas、numpy层),无需自行打包进代码包
三、终极超限解决方案
如果裁剪后总大小仍接近250MB上限,可改用容器镜像方式部署Lambda:Lambda容器镜像支持最大10GB的镜像大小,完全不受250MB解压限制,仅需编写Dockerfile将现有代码和依赖打包为镜像即可正常部署。
内容的提问来源于stack exchange,提问作者Alex Bodner
相关产品推荐
相关产品推荐

