Error when installing python3 packages in alpine

2020-06-11 05:47发布

问题:

I am currently building an image from alpine:3.7.

There are two packages that I am having problems with:

  • pendulum (specifically python-dateutils package)
  • service_identity (specifically attrs package)

The error that I receive it is:

Could not find a version that satisfies the requirement setuptools (from versions: ) No matching distribution found for setuptools

Note: all packages are pre-cached on a directory using pip download.

The dockerfile looks as follows:

RUN apk add --no-cache --virtual .build-deps <dev packages>
 && apk add --no-cache --update python3
 && pip3 install --upgrade pip setuptools

RUN pip3 install -f ./python-packages --no-index -r requirements.txt ./python-packages/pkgs

....

dev-packages such as libffi-dev, libressl-dev, etc.

回答1:

I'm not sure about the full list of dev-packages to build in the question, but it should be the following: g++ (GNU C++ standard library and compiler), python3-dev (python3 development files), libffi-dev (libffi development files) and openssl-dev (Toolkit for SSL v2/v3 and TLS v1 development files).

The Dockerfile is:

FROM alpine:3.7
RUN apk add --no-cache --virtual .build-deps g++ python3-dev libffi-dev openssl-dev && \
    apk add --no-cache --update python3 && \
    pip3 install --upgrade pip setuptools
RUN pip3 install pendulum service_identity


回答2:

Apparently when upgrading pip with:

pip3 install --upgrade pip setuptools

I removed pip upgrading and installation worked. Now, I have been researching the correct way to upgrade pip on alpine and found a Dockerfile in a github repo that does this check:

if [ ! -e /usr/bin/pip ]; then ln -s pip3 /usr/bin/pip ; fi && \
if [[ ! -e /usr/bin/python ]]; then ln -sf /usr/bin/python3 /usr/bin/python; fi && \

Which makes sure that pip3 is being referred when calling just pip command by doing a symbolic link on python and system binaries' directories.