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

Docker部署Python3 AWS Lambda函数报distutils.util模块缺失问题排查

问题核心原因

报错的根源是多阶段构建的运行阶段(最终镜像)缺失python3-distutils依赖,且存在Python版本不匹配问题,具体拆分:

  • 仅在build-image构建阶段安装了python3-distutils,这个包是系统级Python组件,不属于pip安装的用户依赖,不会被复制到最终运行镜像的${FUNCTION_DIR}目录下,而最终运行用的osgeo/gdal:ubuntu-small-latest镜像默认没有预装该依赖
  • 构建阶段单独安装了Python3.6,但osgeo/gdal:ubuntu-small-latest自带的Python版本大概率高于3.6,不同版本的Python模块互不兼容,也会引发导入失败
  • 构建阶段用Python3.6的pip打包的依赖仅适配3.6版本,放到运行阶段高版本Python环境下也会出现兼容问题

注意:distutils.util属于Python标准库的系统级组件,Ubuntu系统的精简镜像默认会裁剪该模块,必须通过apt安装python3-distutils才能使用,无法通过pip安装到自定义的依赖目录下。

修复方案

统一构建和运行阶段的Python版本,在最终运行镜像中补充安装系统级Python依赖,避免额外添加第三方Python源导致版本混乱,修复后Dockerfile如下:

ARG FUNCTION_DIR="/function"

FROM osgeo/gdal:ubuntu-small-latest as build-image

ARG FUNCTION_DIR

RUN apt-get update && \
  apt-get install -y \
  g++ \
  make \
  cmake \
  unzip \
  libcurl4-openssl-dev \
  python3-pip \
  python3-distutils

RUN mkdir -p ${FUNCTION_DIR}

COPY app/* ${FUNCTION_DIR}

RUN python3 -m pip install --target ${FUNCTION_DIR} awslambdaric
RUN python3 -m pip install --target ${FUNCTION_DIR} geopandas

FROM osgeo/gdal:ubuntu-small-latest

ARG FUNCTION_DIR

WORKDIR ${FUNCTION_DIR}

# 运行阶段安装必须的系统Python依赖
RUN apt-get update && apt-get install -y --no-install-recommends \
    python3-distutils \
    python3-pip \
    && rm -rf /var/lib/apt/lists/*

COPY --from=build-image ${FUNCTION_DIR} ${FUNCTION_DIR}

ENTRYPOINT [ "python3", "-m", "awslambdaric" ]
CMD [ "app.handler" ]

如果需要固定Python版本,建议不要使用latest标签的GDAL镜像,选择绑定固定Ubuntu版本的镜像,版本可控性更高。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 14:15:03