本地调用AWS SAM(Lambda)Python代码时出现"No module named requests"错误
解决AWS SAM本地调试Lambda时找不到
requests模块的问题 我之前也碰到过一模一样的问题,SAM本地调试时依赖加载失败确实挺闹心的,给你几个实用的排查和解决方向:
1. 手动把依赖安装到SAM挂载的目录
SAM本地运行时会把你的代码目录挂载到容器的/var/task,但它不会自动帮你安装requirements.txt里的依赖——云端Lambda是部署时自动打包,但本地需要你手动把依赖放到代码目录里。
执行这个命令,把依赖安装到你的Lambda代码所在的目录(比如你的代码在src文件夹,就进入src目录执行):
pip install -r requirements.txt -t .
-t .参数指定把依赖安装到当前目录,这样SAM挂载时就能在容器里找到这些模块了。- 如果用了虚拟环境,确保在虚拟环境中执行这个命令,避免全局环境的干扰。
2. 用sam build自动打包依赖
SAM的build命令会帮你自动处理依赖打包,比手动安装更可靠,步骤如下:
# 项目根目录执行,构建项目并打包依赖 sam build # 用构建后的包本地调用 sam local invoke
执行sam build后,SAM会在.aws-sam/build目录下生成包含所有依赖的代码包,本地invoke时会用这个打包好的版本,避免依赖缺失问题。
3. 检查SAM模板的CodeUri配置
确保你的template.yaml里的Function资源的CodeUri指向正确的目录——这个目录需要包含你的代码和安装好的依赖。比如:
Resources: MyLambdaFunction: Type: AWS::Serverless::Function Properties: CodeUri: src/ # 这里是你的代码目录,要确保依赖装在这里面 Handler: app.lambda_handler Runtime: python3.8
4. 排查依赖安装的其他问题
- 检查
requirements.txt里的依赖名称是否正确,比如requests有没有拼写错误,有没有多余的空格或无效注释。 - 确保本地Python版本和Lambda runtime版本一致(你用的是python3.8),可以用
pyenv或者虚拟环境切换到对应版本后再安装依赖,避免版本不兼容导致的依赖安装失败。 - 清理SAM本地缓存:有时候旧的镜像或挂载缓存会导致问题,可以删除
.aws-sam目录后重新执行sam build。
如果以上方法都试过还是不行,建议把SAM CLI更新到最新版本,旧版本可能存在一些已知的依赖打包bug。
内容的提问来源于stack exchange,提问作者anoj-cha
相关产品推荐
相关产品推荐

