Python无服务器:ModuleNotFoundError

Python serverless: ModuleNotFoundError

我正在尝试将无服务器框架与 python 项目一起使用。 我在离线模式下创建了一个 运行 的 hello world 示例。它运行良好,但是当我尝试导入 python 包时,我得到 ModuleNotFoundError.

这是我的 serverless.yaml 文件:

service: my-test
frameworkVersion: "3"

provider:
  name: aws
  runtime: python3.8

functions:
  hello:
    handler: lambdas.hello.hello
    events:
      - http:
          path: /hello
          method: get
plugins:
  - serverless-python-requirements
  - serverless-offline

在lambdas.hello.py中:

import json
import pandas


def hello(event, context):
    body = {
        "message": 'hello world',
    }

    response = {"statusCode": 200, "body": json.dumps(body)}

    return response

在我的 Pipfile 中:

[[source]]
name = "pypi"
url = "https://pypi.org/simple"
verify_ssl = true

[dev-packages]

[packages]
pandas = "*"

[requires]
python_version = "3.8"

要运行呢,我用命令$ sls offline start 然后当我查询邮递员 http://localhost:3000/dev/hello 时,我收到错误 ModuleNotFoundError。 如果我删除 hello.py 文件中的 import pandas 行,它会起作用。

我不明白为什么我会收到此错误,因为无服务器-python-requirements 应该检查 pipfile 而 pandas 在我的 pipfile 中。

如何在我的 lambdas 中使用离线模式下的无服务器框架使用 pandas(或任何其他 python 包)?

你的 lambda 函数没有安装 panda 模块

您需要使用 serverless-python-requirements 插件:https://www.serverless.com/plugins/serverless-python-requirements。要使用它,您需要 docker 在您的机器上,并在您的服务中创建一个 requirement.txt 文件,其中包含您在 lambda

中需要的包

serverless-python-requirements 插件用于捆绑您的依赖项并将它们打包以进行部署。这仅在您 运行 sls 部署时生效。 从插件页面 - 当您 运行 sls deploy

时,该插件现在将捆绑您在 requirements.txt 或 Pipfile 中指定的 python 依赖项

在此处详细了解 python 包装 - https://www.serverless.com/blog/serverless-python-packaging

由于您是在本地运行安装您的服务,因此不会使用此插件。 您的依赖项需要在本地安装。 执行以下步骤使其工作 -

  • 在您的无服务器目录中创建一个虚拟环境。

  • 安装插件serverless plugin install -n serverless-offline

  • 使用 pip 安装 pandas

  • 运行 sls 离线启动