環境
やりたいこと
Ubuntu標準のレポジトリではPythonのバージョンは固定されてしまう。例えばUbuntu24.04では3.12が入るが、他のバージョンはインストールできない。
そこで有志のレポジトリを追加することで3.9など古いバージョンや3.13など新しいバージョンなど任意のバージョンをインストールしたい。
コード
ARG PYTHON_VERSION RUN --mount=type=cache,target=/var/cache/apt,sharing=locked \ --mount=type=cache,target=/var/lib/apt,sharing=locked <<INSTALL_UBUNTU_PYTHON FINGERPRINT=F23C5A6CF475977595C89F51BA6932366A755776 REPO=deadsnakes SUBREPO=ppa UBUNTU_VERSION=$(source /etc/os-release && echo "$VERSION_CODENAME") curl -sS "http://keyserver.ubuntu.com:11371/pks/lookup?op=get&search=0x${FINGERPRINT}" > "./${REPO}.asc" cat "./${REPO}.asc" | gpg --dearmor -o "/etc/apt/keyrings/${REPO}.gpg" echo "deb [signed-by=/etc/apt/keyrings/${REPO}.gpg] http://ppa.launchpad.net/${REPO}/${SUBREPO}/ubuntu ${UBUNTU_VERSION} main" | tee -a /etc/apt/sources.list.d/${REPO}.list apt-get update apt-get install --no-install-recommends -y python${PYTHON_VERSION} python${PYTHON_VERSION}-dev ln -nfs /usr/bin/python${PYTHON_VERSION} /usr/bin/python ln -nfs /usr/bin/python${PYTHON_VERSION} /usr/bin/python3 curl -sSL https://bootstrap.pypa.io/get-pip.py | python - --break-system-packages rm -rf /var/lib/apt/lists/* pip install uv INSTALL_UBUNTU_PYTHON