You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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:

  1. 先将psycopg2-binary添加到项目依赖(本地会安装x86版本,但不影响最终打包):
    poetry add psycopg2-binary==2.9.6
    
  2. 修改你的构建步骤,在pip install时添加平台参数,强制拉取ARM版本的依赖:
    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'
    
    该命令会忽略本地x86平台,直接下载适配ARM64的psycopg2-binary wheel及其他依赖。

方案二:用Docker模拟ARM环境构建(更可靠)

利用Docker模拟Lambda的ARM运行环境(基于Amazon Linux 2),完全避免交叉编译问题:

  1. 创建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 .
    
  2. 在Intel机器上启用Docker Buildx构建ARM镜像:
    docker buildx build --platform linux/arm64 -t lambda-arm-build .
    
  3. 从容器中复制出打包好的依赖目录:
    docker run --rm -v $(pwd):/output lambda-arm-build cp -r /app/package /output/
    
  4. 最后打包成Lambda所需的ZIP:
    cd package; zip -r ../distro.zip . -x '*.pyc'
    

内容的提问来源于stack exchange,提问作者madhead

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.24 08:43:37