AWS SAM python hello world 应用程序未在本地调试时导入 'requests' 模块
AWS SAM python hello world application not importing 'requests' module on local debug
我试图在 Visual Studio 代码中本地调试 hello world SAM 模板。
我在没有导入 requirements.txt
中提到的任何模块的情况下成功地这样做了
我的.vscode/launch.json
{
"version": "0.2.0",
"configurations": [
{
"type": "aws-sam",
"request": "direct-invoke",
"name": "Invoke Lambda",
"invokeTarget": {
"target": "code",
"lambdaHandler": "hello_world/app.lambda_handler",
"projectRoot": "${workspaceFolder}"
},
"lambda": {
"runtime": "python3.9",
"payload": {
"json": {}
}
}
}
]
}
我的hello_world/app.py
import json
import requests
def lambda_handler(event, context):
print('hello')
return {
"statusCode": 200,
"body": json.dumps({
"message": "hello world",
# "location": ip.text.replace("\n", "")
}),
}
注释掉import requests
后,断点调试成功
为了确定,我尝试执行 sam build
并检查了生成的 .aws-sam 文件夹。它确实在 .aws-sam/build/HelloWorldFunction 文件夹下下载了请求模块。
sam local invoke
没有任何导入错误。
项目结构:
.aws-sam \
build \
HelloWorldFunction \
modules*
app.py
template.yaml
build.toml
.vscode \
launch.json
events \
event.json
hello_world \
__init__.py
app.py
requirements.txt
tests \
...
__init__.py
...
template.yaml
我做错了什么?
显然,调试器在您提到的 projectRoot
文件夹中寻找 requirements.txt
launch.json
将 requirements.txt 从 {projectroot} / hello-world
复制到 {projectroot}
解决了问题
我试图在 Visual Studio 代码中本地调试 hello world SAM 模板。
我在没有导入 requirements.txt
中提到的任何模块的情况下成功地这样做了我的.vscode/launch.json
{
"version": "0.2.0",
"configurations": [
{
"type": "aws-sam",
"request": "direct-invoke",
"name": "Invoke Lambda",
"invokeTarget": {
"target": "code",
"lambdaHandler": "hello_world/app.lambda_handler",
"projectRoot": "${workspaceFolder}"
},
"lambda": {
"runtime": "python3.9",
"payload": {
"json": {}
}
}
}
]
}
我的hello_world/app.py
import json
import requests
def lambda_handler(event, context):
print('hello')
return {
"statusCode": 200,
"body": json.dumps({
"message": "hello world",
# "location": ip.text.replace("\n", "")
}),
}
注释掉import requests
后,断点调试成功
为了确定,我尝试执行 sam build
并检查了生成的 .aws-sam 文件夹。它确实在 .aws-sam/build/HelloWorldFunction 文件夹下下载了请求模块。
sam local invoke
没有任何导入错误。
项目结构:
.aws-sam \
build \
HelloWorldFunction \
modules*
app.py
template.yaml
build.toml
.vscode \
launch.json
events \
event.json
hello_world \
__init__.py
app.py
requirements.txt
tests \
...
__init__.py
...
template.yaml
我做错了什么?
显然,调试器在您提到的 projectRoot
文件夹中寻找 requirements.txt
launch.json
将 requirements.txt 从 {projectroot} / hello-world
复制到 {projectroot}
解决了问题