March 4, 2024

Debian12にPython3.12をソースからインストール

用意したもの

Debian 12を最小構成でセットアップしたVM
amd64(x86_64)、arm64(aarch64)どちらでも

手順

パッケージ追加

sudo apt update
sudo apt upgrade
sudo apt install curl build-essential libssl-dev zlib1g-dev -y

zlib1g-dev(zlib1gではダメ)が無いとaltinstallで以下のエラーが出た。

Creating directory /usr/local/share/man/man1
/usr/bin/install -c -m 644 ./Misc/python.man \
	/usr/local/share/man/man1/python3.12.1
if test "xupgrade" != "xno"  ; then \
	case upgrade in \
		upgrade) ensurepip="--altinstall --upgrade" ;; \
		install|*) ensurepip="--altinstall" ;; \
	esac; \
	 ./python -E -m ensurepip \
		$ensurepip --root=/ ; \
fi
Traceback (most recent call last):
  File "<frozen zipimport>", line 518, in _get_decompress_func
ModuleNotFoundError: No module named 'zlib'

makeすると最後に以下のメッセージが出るので、必要なものがあればaptでパッケージ追加しておく。

The following modules are *disabled* in configure script:
_sqlite3

The necessary bits to build these optional modules were not found:
_bz2                  _ctypes               _ctypes_test
_curses               _curses_panel         _dbm
_gdbm                 _lzma                 _tkinter
_uuid                 nis                   readline
To find the necessary bits, look in configure.ac and config.log.
モジュール対応するaptパッケージ
_sqlite3libsqlite3-dev
_bz2libbz2-dev
_ctypeslibffi-dev
_ctypes_testlibffi-dev
_curseslibncurses-dev
_curses_panellibncurses-dev
_dbmlibgdbm-compat-dev
_gdbmlibgdbm-dev
_lzmaliblzma-dev
_tkintertk-dev
_uuiduuid-dev
nis不明、今時NISは要らないと思う…
readlinelibreadline-dev

全部追加するならこれ

sudo apt install libsqlite3-dev libbz2-dev libffi-dev libncurses-dev libgdbm-compat-dev libgdbm-dev liblzma-dev tk-dev uuid-dev libreadline-dev

ダウンロード

cd ~
curl -OL https://www.python.org/ftp/python/3.12.2/Python-3.12.2.tar.xz

tgzより7MB小さいのでtar.xzにした

展開

tar xf Python-3.12.2.tar.xz

configure

公式ドキュメントのrecommended↓に従ってオプション追加

Configuring Python using –enable-optimizations –with-lto (PGO + LTO) is recommended for best performance. The experimental –enable-bolt flag can also be used to improve performance.

cd Python-3.12.2
./configure --enable-optimizations --with-lto

build

make -j$(nproc)

install

sudo make altinstall

Python 3.11との共存

Debian 12はデフォルトでPython 3.11がインストールされていて /usr/bin/python3python3.11 へのシンボリックリンクとなっている。
update-alternatives で切り替えられるようにする。

sudo update-alternatives --install /usr/bin/python3 python3 /usr/bin/python3.11 1
sudo update-alternatives --install /usr/bin/python3 python3 /usr/local/bin/python3.12 2
python3 --version

© 2020 nissy-lab.com