AWS Lambda部署Docker镜像时utils模块导入失败求助
解决AWS Lambda Docker镜像中找不到
utils模块的问题 核心问题分析
出现No module named 'utils'错误,通常是以下两个原因:
- Docker镜像中代码的目录结构不符合Lambda运行时的要求;
- Python包识别所需的
__init__.py文件存在命名错误。
具体解决方案
1. 修正Dockerfile的文件复制逻辑
Lambda运行时默认从/var/task目录加载代码,你的Dockerfile必须确保所有代码(包括utils文件夹)被正确复制到这个目录。修改后的Dockerfile示例:
# 使用AWS官方Lambda Python基础镜像 FROM public.ecr.aws/lambda/python:3.11 # 复制依赖文件并安装到Lambda任务根目录 COPY requirements.txt ${LAMBDA_TASK_ROOT}/ RUN pip install -r requirements.txt --target "${LAMBDA_TASK_ROOT}" # 复制当前目录下所有文件(包括utils文件夹)到Lambda任务根目录 COPY . ${LAMBDA_TASK_ROOT}/ # 指定Lambda入口函数 CMD ["lambda_function.lambda_handler"]
关键是COPY . ${LAMBDA_TASK_ROOT}/这一步,它会把你的Lambda文件夹下的所有内容(包括lambda_function.py和utils)完整复制到/var/task,保证两者处于同一层级。
2. 修复__init__.py文件名错误
你的目录中__init_.py少了一个下划线,正确的文件名应该是__init__.py(开头和结尾各两个下划线):
- 在Lambda根目录下创建/修正为
__init__.py(空文件即可); - 在
utils文件夹下也创建一个空的__init__.py,让Python识别utils为合法的包。
3. 保持绝对导入方式
无需使用相对导入(.utils),保持原有的绝对导入语句即可:
from utils.textarct_ocr_facturas import Textract from utils.clasificador_doc import clasificadorDoc2S3 from utils.sendDatabase import postgreSQLDatabase from utils.openai_qr import OpenAIStrucured
只要代码结构正确,Lambda运行时的Python路径会自动包含/var/task,能正常识别utils模块。
4. 本地验证镜像结构(可选)
构建镜像后,可本地进入容器检查文件结构是否正确:
# 构建镜像 docker build -t lambda-ocr . # 进入容器bash docker run -it --entrypoint bash lambda-ocr # 查看/var/task目录内容 ls /var/task
确认输出中包含lambda_function.py和utils文件夹。
内容的提问来源于stack exchange,提问作者Julian Cortes
相关产品推荐
相关产品推荐

