nikkie-ftnextの日記

イベントレポートや読書メモを発信

add-apt-repositoryを使わずに最新でないPythonをインストールする 〜UbuntuのDockerイメージを例に〜 (『ハイパーモダンPython』を勝手に補足)

はじめに

モバミちゃん...ラーメンだよ... nikkieです

Today(※最近) I learnedです。
最近は『ハイパーモダンPython』きっかけの学びに満ち溢れています!

目次

『ハイパーモダンPython』より、UbuntuPythonをインストール

1.6 LinuxPythonをインストールする
1.6.2 Ubuntu

Ubuntuのメインリポジトリには1つのバージョン(最新)Pythonしかないということで、以下の方法が案内されます。

  • add-apt-repositoryコマンドを使えるようにするため、software-properties-commonをインストール
  • add-apt-repositoryコマンドでdeadsnakes PPAを追加
  • python3.x-full をインストール

add-apt-repositoryでdeadsnakesを追加する方法は、tokibitoさんの記事にも見つかりました

Ubuntuイメージで検証します(DockerはmacOSにRancherで入れています)

% docker --version
Docker version 27.1.1-rd, build cdc3063

% docker run --rm -it --platform linux/x86_64 ubuntu:24.04 bash
# apt update
# apt search python3  # (以下は出力の抜粋)
python3/noble-updates 3.12.3-0ubuntu2 amd64
python3-dev/noble-updates 3.12.3-0ubuntu2 amd64

# apt install -y software-properties-common  # タイムゾーンの設定についてインタラクティブな質問があります(Asia/Tokyo)
# add-apt-repository ppa:deadsnakes/ppa  # Enterを押す必要あり(-y指定すればよい)
# apt update
# apt search python3
(python3.7 ~ 3.13 が見えました)
(| grep python3..-full などで古いPythonのfullがあることも確認できます)

add-apt-repositoryは非推奨と知ったので、代替手段の素振り

こちらの記事を元にします

qiita.com

https://launchpad.net/ を検索して、deadsnakesを見つけます1

インストールしたいパッケージのページ https://launchpad.net/~deadsnakes/+archive/ubuntu/ppa へ(「Personal package archives」の「New Python Versions」をクリック)。 「Adding this PPA to your system」が一致しているのでよさそうです

「Technical details about this PPA」からFingerprintを控えます。

記事で続く手順はスクリプト化しました

#!/usr/bin/env bash
set -euo pipefail

fingerprint=F23C5A6CF475977595C89F51BA6932366A755776
repo=deadsnakes
subrepo=ppa
ubuntu_version=$(cat /etc/os-release | grep VERSION_CODENAME | sed s/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

試していきます

% docker run --rm -it -v $PWD:/work -w /work --platform linux/x86_64 ubuntu:24.04 bash
# apt update && apt install -y curl gnupg
# ./script.sh
deb [signed-by=/etc/apt/keyrings/deadsnakes.gpg] http://ppa.launchpad.net/deadsnakes/ppa/ubuntu noble main
# apt update && apt install -y python3.10-full
# python3.10 -V
Python 3.10.15

Dockerfile

代替手段をDockerfileにまとめました2

docker build --build-arg python_version=3.10 -t ubuntu-python:3.10 .

終わりに

UbuntuのDockerイメージに、非推奨のadd-apt-repositoryに代わる方法でdeadsnakes PPAを追加し、古いPythonのバージョンをインストールしました。

背景が語られている記事、積ん読です