在 Alpine 上安装 awscli - 如何修复“ModuleNotFoundError: No module named 'six'”

Sho*_*orn 5 python aws-cli alpine-linux

语境

我有一个基于postgres:11-alpine过去工作过的 dockerfile (可能是自上次构建以来的几个月),其定义如下:

FROM postgres:11-alpine

RUN apk update

# install aws cli
# taken from: https://github.com/anigeo/docker-awscli/blob/master/Dockerfile
RUN \
    apk -Uuv add groff less python py-pip && \
    pip install awscli && \
    apk --purge -v del py-pip && \
    rm /var/cache/apk/*
Run Code Online (Sandbox Code Playgroud)

我最近尝试在升级到 postgres 12 之前重建它,但图像构建失败:

 ERROR: unsatisfiable constraints:
              python (missing):
                required by: world[python]
Run Code Online (Sandbox Code Playgroud)

我猜python因为 YOLO ,包裹现在不见了?无论如何,我尝试python3通过将 docker 文件更改为:

RUN \
    apk -Uuv add groff less python3 py-pip && \
    pip install awscli && \
    apk --purge -v del py-pip && \
    rm /var/cache/apk/*
Run Code Online (Sandbox Code Playgroud)

这看起来很有效,但是在运行aws命令时它失败并出现错误:

ModuleNotFoundError: No module named 'six'
Run Code Online (Sandbox Code Playgroud)

如何解决这个问题,这样awscli就不会出现错误No module named 'six'

Sho*_*orn 8

问题似乎实际上是由删除py-pip. 据我所知,目的apk del是减少最终 docker 镜像的大小。我不确定为什么py-pip在文件使用python包时删除曾经起作用。

所以现在以下似乎有效:

RUN \
    apk -Uuv add groff less python3 py-pip && \
    pip install awscli && \
    rm /var/cache/apk/*
Run Code Online (Sandbox Code Playgroud)