十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

如何为 AWS Lambda 函数打包并安装 Pydantic(zip 归档与 Layer)

如何为 AWS Lambda 函数打包并安装 Pydantic(zip 归档与 Layer) 如何为 AWS Lambda 函数打包并安装 Pydanticzip 归档与 Layer【免费下载链接】pydanticData validation using Python type hints项目地址: https://gitcode.com/GitHub_Trending/py/pydantic如果你要部署一个依赖pydantic的 Python AWS Lambda 函数会碰到一个和平时本地装包不同的问题pip默认下载的是针对本地平台编译的 wheel而 Lambda 运行在 Linux 上直接拿本地装的依赖打进去很可能无法运行。pydantic的核心校验逻辑由 Rust 编写的pydantic-core提供这个依赖包含平台相关的编译产物因此打包时必须显式指定目标平台。本文基于仓库内的 AWS Lambda 集成文档介绍两种官方文档覆盖的打包方式——.zip文件归档和 AWS Lambda Layer——如何用pip把pydantic安装到打包目录以及如何验证编译库与 Lambda 运行时匹配。选择打包方式文档列出的 Python 依赖管理方式有三种.zip文件归档把代码和依赖打进同一个.zip随函数一起部署。AWS Lambda Layer把依赖打包成 Layer在多个函数之间共享同一套库。文档的建议是如果你在多个函数中都使用pydantic应考虑使用 Layer。容器镜像第三种方式文档认为其依赖管理更直接未展开说明本文不覆盖。无论选哪种方式共同点是通常会用一个本地虚拟环境来安装和管理依赖但必须通过pip参数让安装的产物对应 Lambda 环境而不是本地平台。用 pip 按 Lambda 平台安装 pydantic构建.zip归档或 Lambda Layer 时文档建议执行如下命令pip install \ --platform manylinux2014_x86_64 \ --targetyour_package_dir \ --implementation cp \ --python-version 3.10 \ --only-binary:all: \ --upgrade pydantic各参数的用途以文档说明为准--platform使用与 Lambda 运行时对应的平台。文档列出的可能取值包括manylinux2014_x86_64和manylinux2014_aarch64但这些值可能随 Pydantic 未来的大版本变更执行前请以文档当时的说明为准。--target指定包的安装目录需要替换成你的实际目录对 Lambda Layer 来说通常是python。--implementation cp使用 CPython 实现。--python-version必须与 Lambda 运行时兼容。pydantic要求 Python 3.10见 安装文档 及pyproject.toml中的requires-python 3.10。--only-binary:all:确保安装的是预编译的二进制 wheel而不是源码构建。--upgrade pydantic安装最新版本的pydantic。your_package_dir是命令中唯一需要你替换的占位符其余参数按自己的 Lambda 运行时架构、Python 版本选择对应值即可。验证确认编译库与 Lambda 运行时匹配打包后最典型的失败现象是函数报no module named pydantic_core._pydantic_core这通常说明pydantic没有按目标平台正确安装。文档给出的排查方法是在失败 import 之前例如在函数入口依次做两项检查。检查一确认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)]预期能看到两个文件类型桩.pyi和编译库。编译库的文件名随操作系统和 Python 版本变化扩展名应为.so或.pyd。检查二确认编译库的版本后缀与 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匹配。如果两项检查不匹配说明构建步骤没有为目标平台装上正确的原生代码文档给出的最常见原因是操作系统或 CPU 架构不匹配如 darwin 与 x86_64-linux-gnu给pip install传正确的--platform参数或在正确平台的 Linux Docker 容器中构建。Python 版本不匹配如cpython-310与cpython-312给pip install传正确的--python-version参数或更改构建所用的 Python 版本。排查 “No package metadata was found for email-validator”如果你使用了pydantic[email]这类可选依赖邮件校验由email-validator提供见 安装文档还可能出现No package metadata was found for email-validator错误。原因是pydantic通过importlib.metadata检查email-validator的版本而部署包中缺少对应的版本元数据。文档给出两条修复路径使用 Serverless Framework 部署时serverless-python-requirements一类的工具会移除元数据以减小包体积需要在serverless.yml中把slim设置为falsepythonRequirements: dockerizePip: non-linux slim: false fileName: requirements.txt使用.zip归档时确保归档中包含email-validator包的dist-info目录。限制与说明--platform的可选值以文档当前列出的manylinux2014_x86_64、manylinux2014_aarch64为准文档明确提示这些值可能随 Pydantic 未来的大版本变更。pydantic要求 Python 3.10--python-version传入的值必须同时满足这一点与 Lambda 运行时的实际版本。完整的背景讨论包括容器镜像方式的安装建议见 docs/integrations/aws_lambda.md。【免费下载链接】pydanticData validation using Python type hints项目地址: https://gitcode.com/GitHub_Trending/py/pydantic创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表