AWS lambda python 多个文件应用程序无法从另一个导入
AWS lambda python multiple files application can't import one from another
我的 AWS lambda 项目结构如下:
module
app.py
b.py
app.py
是我的默认 aws lambda 函数 lambda_handler
,它工作正常。我决定将所有繁重的计算从中提取出来,以运行 calc
of b.py
.
然后,我将它导入到app.py
:
from module.b import calc
现在,当我 运行 在本地使用 sam local invoke Function --event events/event.json
时,它会引发错误:
{"errorType":"Runtime.ImportModuleError","errorMessage":"Unable to import module 'app': No module named 'module'"}
在我看来,当它准备代码到 运行 时,它会将文件移动到其他目录,因此导入会中断。为了解决这个问题,我尝试使用相对导入:
from .b import calc
但它也引发了一个错误:
{"errorType":"Runtime.ImportModuleError","errorMessage":"Unable to import module 'app': attempted relative import with no known parent package"}
如何在 aws lambda 上设置多文件 python 应用程序?
我就是这样解决这个问题的。
首先,您的根文件夹需要如下所示:
lambda_folder
lambda_function.py // Or your main.py.... this file have the method lambda_handler
现在...当我使用多个文件时...我总是使用 lib 文件夹。像这样:
lambda_folder
lib
lib1.py
lib2.py
lib3.py
lambda_function.py
重要
在你的 lib 文件夹中你总是需要一个 __init__.py
否则你看不到里面的文件。
lambda_folder
lib
lib1.py
lib2.py
lib3.py
__init__.py
lambda_function.py
注意: __init__.py
需要在 init
前后两个下划线。
示例
lib1.py
def sum(a,b):
return a+b
lambda_function.py
from lib import lib1
import json
def lambda_handler(event, context):
result = lib.sum(5,4)
return {
"statusCode": 200,
"body": "hi " + result
}
仅此而已。
使用
__init__.py
在你的模块里面导入你 Inside file Packages 在里面像 import app.py
我的 AWS lambda 项目结构如下:
module
app.py
b.py
app.py
是我的默认 aws lambda 函数 lambda_handler
,它工作正常。我决定将所有繁重的计算从中提取出来,以运行 calc
of b.py
.
然后,我将它导入到app.py
:
from module.b import calc
现在,当我 运行 在本地使用 sam local invoke Function --event events/event.json
时,它会引发错误:
{"errorType":"Runtime.ImportModuleError","errorMessage":"Unable to import module 'app': No module named 'module'"}
在我看来,当它准备代码到 运行 时,它会将文件移动到其他目录,因此导入会中断。为了解决这个问题,我尝试使用相对导入:
from .b import calc
但它也引发了一个错误:
{"errorType":"Runtime.ImportModuleError","errorMessage":"Unable to import module 'app': attempted relative import with no known parent package"}
如何在 aws lambda 上设置多文件 python 应用程序?
我就是这样解决这个问题的。
首先,您的根文件夹需要如下所示:
lambda_folder
lambda_function.py // Or your main.py.... this file have the method lambda_handler
现在...当我使用多个文件时...我总是使用 lib 文件夹。像这样:
lambda_folder
lib
lib1.py
lib2.py
lib3.py
lambda_function.py
重要
在你的 lib 文件夹中你总是需要一个 __init__.py
否则你看不到里面的文件。
lambda_folder
lib
lib1.py
lib2.py
lib3.py
__init__.py
lambda_function.py
注意: __init__.py
需要在 init
前后两个下划线。
示例
lib1.py
def sum(a,b):
return a+b
lambda_function.py
from lib import lib1
import json
def lambda_handler(event, context):
result = lib.sum(5,4)
return {
"statusCode": 200,
"body": "hi " + result
}
仅此而已。
使用
__init__.py
在你的模块里面导入你 Inside file Packages 在里面像 import app.py