AWS lambda python多文件应用程序可以';我们不能互相输入
我的AWS lambda项目结构如下:AWS lambda python多文件应用程序可以';我们不能互相输入,python,amazon-web-services,aws-lambda,serverless,Python,Amazon Web Services,Aws Lambda,Serverless,我的AWS lambda项目结构如下: module app.py b.py app.py是我使用lambda\u处理程序的默认aws lambda函数,它工作正常。我决定把所有繁重的计算都拉出来,用b.py的calc 然后,我将其导入到app.py: from module.b import calc 现在,当我使用sam local invoke函数--event events/event.json在本地运行它时,它会引发一个错误: {“errorType”:“Runtime.I
module
app.py
b.py
app.py
是我使用lambda\u处理程序的默认aws lambda函数,它工作正常。我决定把所有繁重的计算都拉出来,用b.py
的calc
然后,我将其导入到app.py
:
from module.b import calc
现在,当我使用sam local invoke函数--event events/event.json
在本地运行它时,它会引发一个错误:
{“errorType”:“Runtime.ImportModuleError”,“errorMessage”:“无法导入模块'app':没有名为'module'”的模块”
在我看来,当它准备运行代码时,它会将文件移动到其他目录,因此导入中断。为了解决这个问题,我尝试使用相对导入:
from .b import calc
但它也引发了一个错误:
{“errorType”:“Runtime.ImportModuleError”,“errorMessage”:“无法导入模块'app':尝试在没有已知父包的情况下进行相对导入”}
如何在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需要有下划线,但是文本中的stackoverflow不允许我写下划线
示例
lib1.py
def sum(a,b):
return a+b
from lib import lib1
import json
def lambda_handler(event, context):
result = lib.sum(5,4)
return {
"statusCode": 200,
"body": "hi " + result
}
lambda_函数.py
def sum(a,b):
return a+b
from lib import lib1
import json
def lambda_handler(event, context):
result = lib.sum(5,4)
return {
"statusCode": 200,
"body": "hi " + result
}
就这些。这就是我解决问题的方法
首先,您的根文件夹需要如下所示:
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需要有下划线,但是文本中的stackoverflow不允许我写下划线
示例
lib1.py
def sum(a,b):
return a+b
from lib import lib1
import json
def lambda_handler(event, context):
result = lib.sum(5,4)
return {
"statusCode": 200,
"body": "hi " + result
}
lambda_函数.py
def sum(a,b):
return a+b
from lib import lib1
import json
def lambda_handler(event, context):
result = lib.sum(5,4)
return {
"statusCode": 200,
"body": "hi " + result
}
仅此而已。使用
\uuuu init\uuuuuuuuuuuupy
在模块内部导入文件包,就像导入app.py
使用
\uuuu init\uuuuuuuuuuuuupy
在模块内部导入文件包,就像导入app.py一样
请截取根lambda文件夹的屏幕截图,另一个是b.py请…请截取根lambda文件夹的屏幕截图,另一个是b.py请…谢谢!这确实有帮助。谢谢!这实际上起了作用。