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

如何编写Python脚本打包指定依赖为zip文件用作AWS Lambda层

实现Python打包指定依赖为AWS Lambda层zip的方案

注意:AWS Lambda层要求依赖必须放在python目录下,zip解压后要能直接看到python/[site-packages内容],否则Lambda运行时会找不到依赖

核心函数实现

以下代码直接实现了你需要的create_zip、add_to_zip逻辑,额外补充了收尾清理的方法:

import os
import sys
import zipfile
import tempfile
import subprocess
from pathlib import Path

# 全局状态存储
_zip_file = None
_temp_dir = None

def create_zip(zip_output_path: str = "lambda_layer.zip"):
    global _zip_file, _temp_dir
    # 初始化临时目录,生成Lambda层要求的python目录结构
    _temp_dir = tempfile.TemporaryDirectory()
    python_dir = Path(_temp_dir.name) / "python"
    python_dir.mkdir(exist_ok=True)
    # 初始化zip文件对象,使用压缩模式减少体积
    _zip_file = zipfile.ZipFile(zip_output_path, "w", zipfile.ZIP_DEFLATED)

def add_to_zip(package_name: str):
    global _zip_file, _temp_dir
    if not _zip_file or not _temp_dir:
        raise RuntimeError("请先调用create_zip()完成初始化")
    
    python_dir = Path(_temp_dir.name) / "python"
    # 调用pip安装指定依赖到临时目录
    subprocess.check_call(
        [sys.executable, "-m", "pip", "install", package_name, "-t", str(python_dir), "--no-cache-dir"],
        stdout=subprocess.DEVNULL,
        stderr=subprocess.STDOUT
    )
    # 遍历安装好的文件写入zip,保留Lambda要求的相对路径
    for root, dirs, files in os.walk(python_dir):
        for file in files:
            file_path = Path(root) / file
            relative_path = file_path.relative_to(Path(_temp_dir.name))
            _zip_file.write(file_path, relative_path)

def finalize_zip():
    """打包完成后调用,关闭zip文件、清理临时文件"""
    global _zip_file, _temp_dir
    if _zip_file:
        _zip_file.close()
    if _temp_dir:
        _temp_dir.cleanup()

使用示例

和你给出的调用逻辑完全对齐:

if __name__ == "__main__":
    create_zip("my_lambda_layer.zip")
    # 注意:glob、json、logging都是Python标准库,Lambda运行环境自带,不需要打包
    for pkg in ['pandas', 'requests']:
        add_to_zip(pkg)
    finalize_zip()

注意事项

  • 如果需要打包兼容特定Lambda运行环境的依赖,比如Python3.9、x86_64架构,可以在pip install的参数里追加--platform manylinux2014_x86_64 --python-version 3.9 --only-binary :all:,替换为你实际使用的运行时版本和架构即可
  • Lambda层解压后的总大小不能超过250MB,注意控制依赖数量
  • 标准库不需要打包,会额外占用zip体积

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 12:06:03