gpt4 book ai didi

python - Python 中的 AWS Lambda : Import parent package/directory in Lambda function handler

转载 作者:行者123 更新时间:2023-12-03 16:26:20 26 4
gpt4 key购买 nike

我在使用 AWS SAM 和 Python 3.8 作为运行时创建的无服务器应用程序(避免困惑的最简单应用程序)中有如下目录结构:

├── common
│   └── a.py
├── hello_world
│   ├── __init__.py
│   ├── app.py
│   └── requirements.txt
└── template.yaml

我要导入 common/a.py Lambda 处理程序中的模块 - hello_world/app.py .现在我知道我可以 import it normally in Python通过将路径添加到 PYTHONPATHsys.path ,但是当代码在 Docker 容器内的 Lambda 中运行时,它不起作用。调用时,Lambda 处理程序函数在 /var/task 内部运行不考虑目录和文件夹结构。

我尝试插入 /var/task/common , /var/common , /var甚至 /commonsys.path像这样以编程方式:
import sys
sys.path.insert(0, '/var/task/common')
from common.a import Alpha

但我仍然收到错误:
ModuleNotFoundError: No module named 'common'
我知道 Lambda Layers 但考虑到我的场景,我想直接引用多个 Lambda 函数中的公共(public)代码,而不需要上传到层。我想要 serverless-python-requirements 之类的东西 中的插件无服务器框架 但在 AWS SAM 中。

所以我的问题是,我应该如何将此路径添加到 commonPYTHONPATHsys.path ?或者是否有其他解决方法,例如 [serverless-python-requirements][3]直接在父文件夹中导入模块而不使用 Lambda 层?

最佳答案

我在包依赖项方面遇到了类似的问题,根据 AWS 知识中心,您应该将所有项目放在根级别:

You might need to create a deployment package that includes thefunction modules located in the root of the .zip file with read andexecute permissions for all files.


根据 https://aws.amazon.com/premiumsupport/knowledge-center/build-python-lambda-deployment-package/

关于python - Python 中的 AWS Lambda : Import parent package/directory in Lambda function handler,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59764018/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com