在 alpine 中安装 python3 包时出错
Error when installing python3 packages in alpine
我目前正在构建来自 alpine:3.7 的图像。
有两个包我遇到了问题:
- pendulum(特别是python-dateutils包)
- service_identity(特别是 attrs 包)
我收到的错误是:
Could not find a version that satisfies the requirement setuptools (from versions: ) No matching distribution found for setuptools
注意:所有包都使用 pip 下载预先缓存在目录中。
dockerfile 如下所示:
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
....
开发包,例如 libffi-dev、libressl-dev 等
我不确定问题中要构建的开发包的完整列表,但应该是以下内容:g++
(GNU C++ 标准库和编译器),python3-dev
(python3 开发文件),libffi-dev
(libffi 开发文件)和 openssl-dev
(SSL 工具包 v2/v3 和 TLS v1 开发文件)。
Dockerfile
是:
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
显然在升级 pip 时:
pip3 install --upgrade pip setuptools
我删除了 pip 升级和安装工作。现在,我一直在研究在 alpine 上升级 pip 的正确方法,并在 github repo 中找到了一个执行此检查的 Dockerfile:
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 && \
这确保了 pip3 被调用时通过在 python 和系统二进制文件的目录。
我目前正在构建来自 alpine:3.7 的图像。
有两个包我遇到了问题:
- pendulum(特别是python-dateutils包)
- service_identity(特别是 attrs 包)
我收到的错误是:
Could not find a version that satisfies the requirement setuptools (from versions: ) No matching distribution found for setuptools
注意:所有包都使用 pip 下载预先缓存在目录中。
dockerfile 如下所示:
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
....
开发包,例如 libffi-dev、libressl-dev 等
我不确定问题中要构建的开发包的完整列表,但应该是以下内容:g++
(GNU C++ 标准库和编译器),python3-dev
(python3 开发文件),libffi-dev
(libffi 开发文件)和 openssl-dev
(SSL 工具包 v2/v3 和 TLS v1 开发文件)。
Dockerfile
是:
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
显然在升级 pip 时:
pip3 install --upgrade pip setuptools
我删除了 pip 升级和安装工作。现在,我一直在研究在 alpine 上升级 pip 的正确方法,并在 github repo 中找到了一个执行此检查的 Dockerfile:
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 && \
这确保了 pip3 被调用时通过在 python 和系统二进制文件的目录。