如何在Intel机器上用Poetry构建AWS Graviton(ARM)Python Lambda
在Intel机器上用Poetry构建适配ARM64的Python Lambda包(依赖psycopg2-binary)
问题根源
直接安装ARM架构的psycopg2-binary wheel失败,是因为pip会校验本地平台(Intel主机为x86_64)与wheel的平台标签不匹配;而poetry add --platform参数仅用于锁定跨平台依赖,无法强制本地安装非当前平台的wheel。
以下是两种可行的解决方案:
方案一:通过Poetry+指定pip平台参数构建
无需修改依赖配置,仅在安装阶段强制下载ARM架构的wheel:
- 先将psycopg2-binary添加到项目依赖(本地会安装x86版本,但不影响最终打包):
poetry add psycopg2-binary==2.9.6 - 修改你的构建步骤,在
pip install时添加平台参数,强制拉取ARM版本的依赖:
该命令会忽略本地x86平台,直接下载适配ARM64的psycopg2-binary wheel及其他依赖。poetry build # 关键:--platform 指定ARM平台,--only-binary 确保只下载二进制wheel poetry run pip install --upgrade --target package --platform manylinux2014_aarch64 --only-binary :all: dist/*.whl cd package; zip -r ../distro.zip . -x '*.pyc'
方案二:用Docker模拟ARM环境构建(更可靠)
利用Docker模拟Lambda的ARM运行环境(基于Amazon Linux 2),完全避免交叉编译问题:
- 创建
Dockerfile:FROM public.ecr.aws/lambda/python:3.9-arm64 # 安装Poetry RUN pip install poetry WORKDIR /app # 复制依赖配置文件 COPY pyproject.toml poetry.lock* ./ # 安装依赖并导出到package目录 RUN poetry config virtualenvs.create true \ && poetry install --no-root \ && poetry run pip install --upgrade --target package . - 在Intel机器上启用Docker Buildx构建ARM镜像:
docker buildx build --platform linux/arm64 -t lambda-arm-build . - 从容器中复制出打包好的依赖目录:
docker run --rm -v $(pwd):/output lambda-arm-build cp -r /app/package /output/ - 最后打包成Lambda所需的ZIP:
cd package; zip -r ../distro.zip . -x '*.pyc'
内容的提问来源于stack exchange,提问作者madhead
相关产品推荐
相关产品推荐

