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