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 离线启动
我正在尝试将无服务器框架与 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 离线启动