pydantic
与 AWS Lambda 函数集成良好。在本指南中,我们将讨论如何为 AWS Lambda 函数设置 pydantic
。
为 AWS Lambda 函数安装 Python 库¶
有许多方法可以在 AWS Lambda 函数中利用 Python 库。正如 AWS Lambda 文档中所概述的,最常见的方法包括:
-
使用
.zip
文件存档来打包您的代码和依赖项 -
使用 AWS Lambda 层在多个函数之间共享库
-
使用容器映像打包您的代码和依赖项
所有这些方法都可以与 pydantic
一起使用。最适合您的方法将取决于您的具体要求和限制。在这里,我们将更深入地介绍前两种情况,因为使用容器映像进行依赖项管理更直接。如果您正在使用容器映像,您可能会发现此注释对安装 pydantic
有帮助。
!!提示如果您在多个函数中使用 pydantic
,您可能需要考虑 AWS Lambda 层,它支持在多个函数之间无缝共享库。
无论您选择哪种依赖项管理方法,遵循这些准则都有助于确保依赖项管理过程的顺利进行。
为 AWS Lambda 函数安装 pydantic
¶
当你使用代码和依赖项构建 .zip
文件存档或为 Lambda 层组织 .zip
文件时,你可能会使用本地虚拟环境来安装和管理依赖项。如果你使用的是 pip
,这可能会有点棘手,因为 pip
会安装为你本地平台编译的轮子,而这些轮子可能与 Lambda 环境不兼容。
因此,我们建议您使用类似于以下的命令:
pip install \
--platform manylinux2014_x86_64 \ # (1)!
--target=<your_package_dir> \ # (2)!
--implementation cp \ # (3)!
--python-version 3.10 \ # (4)!
--only-binary=:all: \ # (5)!
--upgrade pydantic # (6)!
-
使用与您的 Lambda 运行时相对应的平台。
-
指定要安装软件包的目录(通常为
python
用于 Lambda 层)。 -
使用 CPython 实现。
-
Python 版本必须与 Lambda 运行时兼容。
-
此标志确保安装了预构建的二进制轮子。
-
将安装最新版本的
pydantic
。
故障排除¶
no module named 'pydantic_core._pydantic_core'
¶
这
no module named `pydantic_core._pydantic_core`
错误是一个常见问题,表示您安装 pydantic
不正确。要调试此问题,您可以尝试以下步骤(在失败的导入之前):
-
检查已安装的
pydantic-core
软件包的内容。已编译的库及其类型存根是否都存在?from importlib.metadata import files print([file for file in files('pydantic-core') if file.name.startswith('_pydantic_core')]) """ [PackagePath('pydantic_core/_pydantic_core.pyi'), PackagePath('pydantic_core/_pydantic_core.cpython-312-x86_64-linux-gnu.so')] """
你应该会看到两个类似于上面打印出来的文件。编译库文件将是一个.so 或.pyd 文件,其名称根据操作系统和 Python 版本而有所不同。
-
检查您的 lambda 的 Python 版本是否与上面找到的已编译库版本兼容。
import sysconfig print(sysconfig.get_config_var("EXT_SUFFIX"))
> '.cpython-312-x86_64-linux-gnu.so'¶
你应该期望在这里看到与编译库相同的后缀,例如在这里我们看到这个后缀 .cpython-312-x86_64-linux-gnu.so
确实与 _pydantic_core.cpython-312-x86_64-linux-gnu.so
匹配。
如果这两个检查不匹配,您的构建步骤没有为 lambda 的目标平台安装正确的本机代码。您应该调整构建步骤来更改安装的库的版本。
最有可能的错误:
-
你的操作系统或 CPU 架构不匹配(例如 darwin 与 x86_64-linux-gnu)。在安装 lambda 依赖项时,请尝试将正确的
--platform
参数传递给pip install
,或者在正确的平台上的 linux docker 容器内进行构建。目前可能的平台包括--platform manylinux2014_x86_64
或--platform manylinux2014_aarch64
,但这些可能会随着未来的 Pydantic 主要版本而改变。 -
你的 Python 版本不匹配(例如 `cpython-310` 与 `cpython-312` 不匹配)。尝试将正确的 `--python-version` 参数传递给 `pip install` ,或者更改构建中使用的 Python 版本。
没有找到 email-validator
的软件包元数据¶
Pydantic 使用 version
从 importlib.metadata
检查安装了哪个版本的 email-validator
。这种软件包版本控制机制与 AWS Lambda 有些不兼容,尽管它是 Python 中软件包版本控制的行业标准。有几种方法可以解决这个问题:
如果您使用无服务器框架部署 lambda,则可能没有将适用于 email-validator
包的适当元数据包含在部署包中。像 serverless-python-requirements
这样的工具会删除元数据以减小包的大小。您可以通过在 serverless.yml
文件中将 slim
设置设置为 false 来解决此问题:
pythonRequirements:
dockerizePip: non-linux
slim: false
fileName: requirements.txt
你可以了解更多关于此修复以及其他可能与此相关的 slim
设置的信息。
如果您正在使用 .zip
存档来存储您的代码和/或依赖项,请确保您的软件包包含所需的版本元数据。为此,请确保您的 .zip
存档中包含 email-validator
软件包的 dist-info
目录。
这个问题也已经在其他流行的 Python 库中被报道过,比如 jsonschema
,因此你也可以在那里了解更多关于这个问题以及可能的修复方法。
额外资源¶
更多调试技巧¶
如果你在为你的 AWS Lambda 安装 pydantic
时仍有困难,你可以参考这个问题,它涵盖了其他开发人员遇到的各种问题和解决方案。
验证 event
和 context
数据¶
查看我们的博客文章,了解更多关于如何在 AWS Lambda 函数中使用 pydantic
来验证 event
和 context
数据的信息。
本文总阅读量次