FastAPI的AWS lambda部署给出以下错误:
[ERROR] Runtime.ImportModuleError: Unable to import module 'users_crud': No module named 'pydantic_core._pydantic_core' Traceback (most recent call last):
字符串虽然pydantic库已经安装了,但我使用的是AWS现在支持的3.10版本。
yjghlzjz1#
今天早上我也遇到了同样的错误。我检查了FastAPI的发行说明:新版本0.100.0有一些关于Pydantic的更改。我不太明白所有这些,但是一个快速的临时解决方案是将FastAPI版本固定为0.99.0。希望这对你也有帮助。
nwnhqdif2#
请参阅pydantic/pydantic#6557-基本上你可能已经安装了错误的架构pydantic-core。
pydantic-core
kh212irz3#
我在使用Serverless Framework时也遇到了同样的错误,在requirements.txt中有这些依赖项:
boto3==1.28.1 boto3-stubs==1.28.68 pydantic==2.4.0 pydantic[email] pydantic-settings==2.1.0 pytest==7.3.1 pytest-mock==3.11.1 mock==5.0.2 pipreqs==0.4.13 black==23.7.0 backoff==2.2.1 mypy==1.5.1
字符串但是没有任何依赖问题;当你在不同的架构中为你的Lambda构建依赖包时(在pip install步骤中),错误就会发生。在我的例子中,我使用了一个带有VSCode的devcontainer和我构建的Docker镜像:1.我的第一个错误是这样的:
FROM ubuntu:latest
型基本上,我没有在我的Dockerfile中指定操作系统架构。所以,我替换了这一行:
FROM arm64v8/ubuntu:latest
型
provider: name: aws runtime: python3.10 architecture: arm64
型我还在默认层定义中指定了架构类型:
layer: name: ${self:custom.resources.layers.commons.name} description: Python requirements lambda layer compatibleRuntimes: - python3.10 compatibleArchitectures: # optional, a list of architectures this layer is compatible with - arm64
型最后,我再次部署了我的项目,解决了我的问题。
结论:您必须在用于部署Lambda的同一架构上构建依赖包。PD:关于arm 64架构与x86架构:https://docs.aws.amazon.com/lambda/latest/dg/foundation-arch.html?icmpid=docs_lambda_help#foundation-arch-adv
0qx6xfy64#
在我的例子中,这个问题的解决方案是在Linux系统上运行pip install(它可以自动安装正确的版本)。我使用了没有fastapi的pydantic,并在lambda层使用py39x86架构创建了库。此外,如果你无法访问Linux环境,直接解压缩“whl”文件也可能会有帮助。
pip install
py39
x86
ycggw6v25#
Lambda需要为特定架构构建的软件包。许多软件包都有适用于多种架构的发行版(请参阅pydantic-core的可用发行版)。默认情况下,pip安装适合您运行它的机器的发行版,这不一定与Lambda的架构相同。但是你可以强制pip安装你想要的架构的软件包。如果你的Lambda使用x86_64,那么你应该选择平台manylinux2014_x86_64:
pip
x86_64
manylinux2014_x86_64
pip install pydantic-core --platform manylinux2014_x86_64 -t . --only-binary=:all:
字符串-t .-安装到当前目录。但是,最好的方法是在所需的平台上安装所有依赖项,而不是为每个包安装依赖项。
-t .
pip install -r requirements.txt --platform manylinux2014_x86_64 --target ./python --only-binary=:all:
型这是this answer。
sr4lhrrt6#
帮助我的是:1.创建一个包含所有依赖项的lambda层:
pip install --platform manylinux2014_x86_64 --target=<layer-folder> --implementation cp --python-version 3.11 --only-binary=:all: --upgrade langchain==0.0.349 pip install --platform manylinux2014_x86_64 --target=<layer-folder> --implementation cp --python-version 3.11 --only-binary=:all: --upgrade openai==1.6.1
字符串(You可以选择使用requirements.txt -在我的例子中,我只需要这两个依赖项,并且langchain也需要openai。)2)确保依赖项匹配lambda架构(您有两个选项:x86_64或arm 64):
--platform manylinux2014_x86_64 --target=python2 --implementation cp --python-version 3.11 --only-binary=:all:
型这对我选择的架构是必要的。根据你的调整。3)确保依赖版本包含所有必要的类:
值得一提的是,依赖关系非常大,因此将所有依赖关系放置在一个层中并附加该层非常有用。对于Python,该层应包含一个zip文件,路径如下:== python/lib/python3./site-packages。请参阅AWS文档。
6条答案
按热度按时间yjghlzjz1#
今天早上我也遇到了同样的错误。我检查了FastAPI的发行说明:新版本0.100.0有一些关于Pydantic的更改。我不太明白所有这些,但是一个快速的临时解决方案是将FastAPI版本固定为0.99.0。希望这对你也有帮助。
nwnhqdif2#
请参阅pydantic/pydantic#6557-基本上你可能已经安装了错误的架构
pydantic-core
。kh212irz3#
我在使用Serverless Framework时也遇到了同样的错误,在requirements.txt中有这些依赖项:
字符串
但是没有任何依赖问题;当你在不同的架构中为你的Lambda构建依赖包时(在pip install步骤中),错误就会发生。在我的例子中,我使用了一个带有VSCode的devcontainer和我构建的Docker镜像:
1.我的第一个错误是这样的:
型
基本上,我没有在我的Dockerfile中指定操作系统架构。所以,我替换了这一行:
型
型
我还在默认层定义中指定了架构类型:
型
最后,我再次部署了我的项目,解决了我的问题。
结论:您必须在用于部署Lambda的同一架构上构建依赖包。
PD:关于arm 64架构与x86架构:https://docs.aws.amazon.com/lambda/latest/dg/foundation-arch.html?icmpid=docs_lambda_help#foundation-arch-adv
0qx6xfy64#
在我的例子中,这个问题的解决方案是在Linux系统上运行
pip install
(它可以自动安装正确的版本)。我使用了没有fastapi的pydantic,并在lambda层使用py39
x86
架构创建了库。此外,如果你无法访问Linux环境,直接解压缩“whl”文件也可能会有帮助。
ycggw6v25#
Lambda需要为特定架构构建的软件包。许多软件包都有适用于多种架构的发行版(请参阅
pydantic-core
的可用发行版)。默认情况下,pip
安装适合您运行它的机器的发行版,这不一定与Lambda的架构相同。但是你可以强制
pip
安装你想要的架构的软件包。如果你的Lambda使用x86_64
,那么你应该选择平台manylinux2014_x86_64
:字符串
-t .
-安装到当前目录。但是,最好的方法是在所需的平台上安装所有依赖项,而不是为每个包安装依赖项。
型
这是this answer。
sr4lhrrt6#
帮助我的是:
1.创建一个包含所有依赖项的lambda层:
字符串
(You可以选择使用requirements.txt -在我的例子中,我只需要这两个依赖项,并且langchain也需要openai。)2)确保依赖项匹配lambda架构(您有两个选项:x86_64或arm 64):
pip
命令中我使用了这个:型
这对我选择的架构是必要的。根据你的调整。3)确保依赖版本包含所有必要的类:
值得一提的是,依赖关系非常大,因此将所有依赖关系放置在一个层中并附加该层非常有用。对于Python,该层应包含一个zip文件,路径如下:== python/lib/python3./site-packages。请参阅AWS文档。