如果我基于 Alpine 构建包含 Python 的最简化的 docker 镜像:
FROM python:3.7-alpine3.9
我可以成功输入它并验证安装的版本是否为 3.7:
/ # python --version
Python 3.7.3
/ # python3 --version
Python 3.7.3
但是,如果我安装一些需要 Python3 的软件包,例如python3-dev
(其他软件包需要)或 Python3 本身,Alpine 不使用 3.7 版,而是出于某种我不明白的原因使用 3.6:
/ # apk add python3-dev
(1/3) Installing pkgconf (1.6.0-r0)
(2/3) Installing python3 (3.6.8-r2)
(3/3) Installing python3-dev (3.6.8-r2)
Executing busybox-1.29.3-r10.trigger
OK: 108 MiB in 38 packages
printenv
还显示(在 docker 映像构建期间)使用了版本 3.7.x,但包系统没有反映这一点。摘录:
PYTHON_VERSION=3.7.3
我在这里看到 Python 3.6 作为所有 Alpine 版本的默认版本,最高可达 3.9。Python 3.7 仅适用于"边缘"。
我也找到了这个也不起作用的答案:
# apk add python3 --repository=http://dl-cdn.alpinelinux.org/alpine/edge/main
(1/1) Installing python3 (3.6.8-r2)
安装了 Python 3.6。但是,如果我使用最简单的Alpine而不使用PythonFROM alpine:3.9
并使用相同的命令,则安装了Python 3.7:
# apk add python3 --repository=http://dl-cdn.alpinelinux.org/alpine/edge/main
<TRIMMED_TEXT>
(11/11) Installing python3 (3.7.3-r0)
如何告诉python:3.7-alpine3.9
中的包管理器使用 Python 3.7 而不是 Python 3.6?
如果您事先删除(虚拟).python-rundeps
软件包,安装将按预期进行。
FROM python:3.7-alpine3.9
RUN
apk update
&& apk del .python-rundeps
&& apk add --repository=http://dl-cdn.alpinelinux.org/alpine/edge/main
python3-dev=3.7.3-r0
生成此映像可产生:
...
(12/13) Installing python3 (3.7.3-r0)
...
你需要 python 版本 3.7 吗?您可以使用版本 3.6,它存在:https://hub.docker.com/_/python/?tab=tags&page=3
FROM python:3.6-alpine3.9
或
FROM python:3.6.8-alpine
FROM python:3.6-alpine
FROM python:3.6.8-alpine3.9