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

多文件Python包容器化部署AWS Lambda时的模块导入问题

问题分析

你遇到的模块找不到错误,核心原因有两个:

  1. Lambda Python运行时默认将/var/task加入Python的sys.path,但你把代码放到了自定义的/usr/lambda目录,运行时无法识别这个路径下的模块。
  2. 代码复制方式导致目录结构不符合Python包的导入规则,且未确保目标目录被纳入Python的搜索路径。
解决方案

1. 修正Dockerfile,遵循Lambda默认目录规范

Lambda的Python基础镜像默认将LAMBDA_TASK_ROOT设为/var/task,无需手动修改。调整Dockerfile如下,确保代码和依赖都放在这个默认目录下:

COPY requirements.txt .
RUN pip install --upgrade pip
# 将依赖安装到Lambda默认的任务目录
RUN pip install -r requirements.txt --target "/var/task"
# 将src下的整个b包目录复制到/var/task,保证/var/task/b是完整的Python包
COPY src/b /var/task/b

2. 确保b目录是合法的Python包

在src/b目录下创建空的__init__.py文件,让Python将其识别为可导入的包。最终目录结构应如下:

项目根目录
├── requirements.txt
├── Dockerfile
└── src
    └── b
        ├── __init__.py
        ├── handler.py
        └── 其他依赖文件

3. 设置正确的Lambda Handler

部署后,将CMD覆盖项设置为b.handler.lambda_handler,对应/var/task/b/handler.py文件中的lambda_handler函数。

本地测试修正

你本地运行镜像时的输出显示未指定handler参数,需要在启动命令后补充handler:

docker run -p 9000:8080 3cdde6464b082779fec0f6c263b9052514886d4f90d0d0c1a6d8d40f459660c7 b.handler.lambda_handler

之后可通过curl测试函数调用:

curl -XPOST "http://localhost:9000/2015-03-31/functions/function/invocations" -d '{}'
额外说明

如果一定要使用自定义目录(如/usr/lambda),需在Dockerfile中把该路径加入Python的环境变量:

ENV LAMBDA_TASK_ROOT="/usr/lambda"
ENV PYTHONPATH="${PYTHONPATH}:${LAMBDA_TASK_ROOT}"

但更推荐遵循Lambda的默认规范,使用/var/task目录,减少配置复杂度。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 08:47:24