尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

Serverless Framework 如何启用内置 Python 依赖打包并配置 dockerizePip 跨平台编译?

Serverless Framework 如何启用内置 Python 依赖打包并配置 dockerizePip 跨平台编译? Serverless Framework 如何启用内置 Python 依赖打包并配置 dockerizePip 跨平台编译【免费下载链接】serverless⚡ Serverless Framework – Effortlessly build apps that auto-scale, incur zero costs when idle, and require minimal maintenance using AWS Lambda and other managed cloud services.项目地址: https://gitcode.com/GitHub_Trending/se/serverless如果你用 Serverless Framework 部署带 Python 函数的项目需要把requirements.txt或 Pipenv/Poetry/uv 项目里的依赖打包进部署产物并且要在非 Linux 机器Windows、macOS上编译非纯 Python 包或拉取 manylinux 轮子这篇文档对应的场景就是启用 Framework 内置的 Python 依赖打包并配置dockerizePip让打包过程在 Docker 容器里完成。完成后的结果是运行sls package生成的产物里包含全部已安装的依赖无需再安装社区插件serverless-python-requirements。准备条件该功能默认内置于 Framework无需安装任何东西Python Support。使用 Docker 做跨平台编译时宿主机需要可用的 Docker 环境文档的 macOS Brew Python 一节也给出了安装 Docker 并使用dockerizePip选项的官方替代路径。serverless package即使不部署到 AWS也要求配置有效的 AWS 凭证因为打包过程需要访问 SSM Parameter Store 和 S3 来查询 State 与 Deployment Bucket 的存储位置Packaging。凭证需允许访问 AWS SSM 和 AWS S3。第一步启用内置 Python 依赖打包内置集成只在serverless.yml的custom.pythonRequirements块存在且未被显式禁用时激活。没有依赖选项时保留一个空对象即可custom: pythonRequirements: {}如果你之前使用的是社区插件迁移步骤是从serverless.yml的plugins段和package.json中移除serverless-python-requirements配置面保持不变仍然写在custom.pythonRequirements下。反过来如果你希望完全自己管理依赖可以设置custom.pythonRequirements.enabled: false或直接删除该块禁用后 Framework 不会改动你的产物需要由其他流程在部署前准备好依赖。依赖来源按项目文件自动识别requirements.txt直接使用含Pipfile的项目走 Pipenv要求 pipenv 版本不低于2022-04-08含pyproject.toml的项目走 Poetry执行poetry export --without-hashes -f requirements.txt -o requirements.txt --with-credentials存在uv.lock时走uv export --no-dev --frozen --no-hashes生成中间文件.serverless/requirements.txt。第二步配置 dockerizePip 跨平台编译要在非 Linux 系统上编译非纯 Python 模块或获取 manylinux 轮子Framework 会通过 Docker 和官方 AWS build 镜像完成。在serverless.yml中添加custom: pythonRequirements: dockerizePip: truedockerizePip除了布尔值还支持一个特殊值non-linux表示只在非 Linux 环境中启用 Docker 化。根据需求还可以补充以下选项使用自己的镜像dockerImage必须是完整镜像名加 tag含运行时对应的 tag。注意dockerImage与dockerFile互斥不能同时配置。使用自己的 Dockerfile例如某些包构建时需要额外系统依赖可以替换默认镜像FROM public.ecr.aws/sam/build-python3.9 # Install your dependencies RUN yum -y install mysql-develcustom: pythonRequirements: dockerFile: DockerfiledockerFile指向的 Dockerfile 必须位于当前目录或其子目录。私有 git 仓库依赖开启dockerSsh: true会把$HOME/.ssh/id_rsa和$HOME/.ssh/known_hosts挂载进容器用其他密钥时可用dockerPrivateKey指定绝对路径。前置条件私有仓库的主机必须已写入$HOME/.ssh/known_hosts否则安装会因主机认证失败而报错。给容器传环境变量用dockerEnv列表例如dockerEnv: [https_proxy]。运行时所需的系统库某些包文档示例为mysqlclient需要libmysqlclient.so.1020在运行时还需要额外的*.so文件用dockerExtraFiles把它们放进产物根目录例如dockerExtraFiles: [/usr/lib64/mysql57/libmysqlclient.so.1020]。一个值得注意的组合如果同时配置了installer: uv并使用默认 AWS build 镜像public.ecr.aws/sam/build-python...uv 会在容器内自动安装但一旦改用dockerImage或dockerFile自定义镜像就必须自己保证镜像内有 uv。第三步执行打包在项目根目录运行sls packageserverless package等价也可以加--package my-artifacts指定产物输出目录Packaging。不指定时部署产物保存在服务的.serverless目录。另外两个手动命令sls requirements install # 手动创建 .requirements及 zip 支持下的 requirements.zip sls requirements clean # 清理 .requirements / requirements.zip sls requirements cleanCache # 清理 pip download/static 缓存例如切换 Python 版本后pip 的 download/static 缓存在.serverless之外切换 Python 版本后建议用cleanCache手动清理如果你维护自己的 Python 库更新后需要清理.requirements可设置invalidateCaches: true让每次打包自动清理。验证结果文档给出的验证方式是检查产物 zip 的内容以运行时库场景为例sls package zipinfo .serverless/xxx.zip其中xxx.zip是占位写法替换为你.serverless目录里实际的产物文件名。在zipinfo输出中确认依赖目录以及通过dockerExtraFiles引入的.so库都在列表里如果看不到预期文件文档提示可能需要调整serverless.yml中的 package include/exclude 配置。限制与已知问题dockerImage和dockerFile互斥只能二选一。macOS 上用 Homebrew 安装的 Python 会破坏--target选项导致打包出问题。文档给出的三条出路用 python.org 的 Python 并配合pythonBin选项创建并激活 virtualenv 再运行 serverless或安装 Docker 使用dockerizePip。Windows 上使用dockerizePip需要在 Docker 设置中启用共享卷如果是在 WSL 里运行 serverless还需要在 WSL 内安装 Docker clientWindows dockerizePip notes。依赖体积大如numpy、scipy、scikit-learn时文档提供了zip: true压缩需在 handler 中import unzip_requirements、slim: true瘦身和把依赖放进 Lambda Layer 等后续手段可按产物大小再决定是否需要。完成打包验证后下一步就是照常执行部署命令把产物上线依赖打包本身至此完成。【免费下载链接】serverless⚡ Serverless Framework – Effortlessly build apps that auto-scale, incur zero costs when idle, and require minimal maintenance using AWS Lambda and other managed cloud services.项目地址: https://gitcode.com/GitHub_Trending/se/serverless创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表