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} 解决了问题