動かざることバグの如し

近づきたいよ 君の理想に

DockerでUbuntuイメージに任意のPythonバージョンをインストールしたい

環境

やりたいこと

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

参考リンク