apt install python3.11 安装多个版本的python

apt install python3.11 安装多个版本的python

我有以下 docker 文件,基本映像 rundeckpro/runner:latest;它没有安装Python。镜像构建后,有两个版本的python:python3.10和python3.11,尽管我只请求了python3.11。这有什么原因吗?我可以避免这种情况吗?

ARG RUNNER_VERSION=latest
FROM rundeckpro/runner:${RUNNER_VERSION}

ARG PYTHON_VERSION=python3.11
ARG DEBIAN_FRONTEND=noninteractive

USER root

RUN apt-get update && \
    apt-get install -y --no-install-recommends software-properties-common && \
    apt-get install -y --no-install-recommends gpg-agent && \
    add-apt-repository -y ppa:deadsnakes/ppa && \
    apt-get install -y --no-install-recommends $PYTHON_VERSION && \
    apt-get install -y --no-install-recommends $PYTHON_VERSION-venv && \
    apt-get clean && \
    rm -rf /var/lib/apt/lists/*

RUN update-alternatives --install /usr/bin/python3 python3 /usr/bin/python3.11 1    

USER runner

答案1

rundeckpro/runner目前基于Ubuntu 22.04,22.04中Python的默认版本是3.10。software-properties-common依赖于 Python,因此安装最终会安装python3.10.

因为你只需要software-properties-common安装死蛇 PPA,您可以在安装 PPA 后将其删除:

RUN apt-get update && \
    apt-get install -y --no-install-recommends software-properties-common gpg-agent && \
    add-apt-repository -y ppa:deadsnakes/ppa && \
    apt-get purge -y --autoremove software-properties-common gpg-agent && \
    apt-get install -y --no-install-recommends $PYTHON_VERSION && \
    apt-get clean && \
    rm -rf /var/lib/apt/lists/*

这会给你python3.11但不会python3.10

不幸的是python3.11-venv,即使在死蛇 PPA 中,也取决于,从而python3-distutils拉入。python3python3.10

另外,不要费心寻找替代方案,Python 包不使用它们;如果需要python3,请链接:

ln -sf python3.11 /usr/bin/python3

(但请注意,如果python3安装了该软件包,这可能会破坏某些东西 - 如果某个软件包需要该python3软件包,则应单独保留符号链接,并python3.11显式使用)。

相关内容