You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

AWS Lambda上传Python包大小超限问题求助

解决AWS Lambda打包numpy+OpenCV大小超限的方案

核心优化方向:精简依赖+针对性编译+分层拆分

1. 替换为轻量化依赖包

  • 强制使用opencv-python-headless替代完整版opencv-python,去掉GUI组件后体积能减少约30%
  • 避免安装完整numpy的冗余组件,后续通过编译裁剪进一步缩小体积

2. 针对Lambda环境编译依赖

Lambda基于Amazon Linux 2运行,直接在本地安装的依赖会包含多余系统库,需在模拟环境中安装:

  • 用Docker启动Amazon Linux 2容器:
    docker run -it --rm amazonlinux:2
    
  • 容器内安装编译工具与Python环境:
    yum install -y python3-pip gcc python3-devel
    
  • 创建目标目录,安装依赖时跳过缓存与冗余依赖:
    mkdir /lambda-deps
    pip3 install numpy opencv-python-headless pydicom pillow --target /lambda-deps --no-cache-dir --no-deps
    
  • 将容器内的/lambda-deps复制到本地,得到仅适配Lambda环境的精简依赖

3. 手动裁剪冗余文件

对依赖目录做进一步瘦身:

  • 删除numpy下的tests目录、所有.pyc字节码文件
  • 删除opencv-python-headless中cv2/data目录下未用到的训练数据(如仅保留需要的分类器,其余删除)
  • 删除所有.dist-info元信息目录,不影响运行但能减少体积

4. 拆分Lambda Layer避免超限

Lambda单个Layer压缩后上限为50MB,将裁剪后的依赖拆分为两个独立Layer:

  • 第一个Layer包含numpy+pydicom+pillow,第二个Layer包含opencv-python-headless
  • 用最高压缩级别打包:
    zip -r9 numpy-layer.zip ./numpy-group/
    zip -r9 opencv-layer.zip ./opencv-group/
    
  • 上传两个Layer到Lambda,并在函数中关联使用

5. 极端场景:切换为Lambda容器镜像

若上述方法仍无法解决,改用容器镜像方案(上限10GB):

  • 基于官方Lambda Python镜像构建Dockerfile:
    FROM public.ecr.aws/lambda/python:3.11
    COPY requirements.txt .
    RUN pip install -r requirements.txt --no-cache-dir
    COPY your-code.py .
    CMD ["your-code.lambda_handler"]
    
  • 将镜像推送到AWS ECR,创建Lambda函数时选择容器镜像即可

内容的提问来源于stack exchange,提问作者Talha

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.05 10:11:01