LoginSignup
2
3

【Google Cloud】Python3.12をソースから13分でビルドする(PGO+LTO有効化)

Posted at

はじめに

みずほリサーチ&テクノロジーズの@fujineです。

本記事では、Google Cloudのオンライン環境であるCloud Shellに、2024/2/6にリリースされたPython3.12.2をソースからインストールする方法をご紹介します。コンパイラ最適化手法であるPGOとLTOを有効化した状態で、13分でインストールできました。

Cloud ShellにはPython3.9を含む様々なランタイムツールがプリインストールされており、sudo apt install等で追加パッケージのインストールも可能です。しかし、Cloud Shellではセッションが切断すると、$HOME以外の変更は全て初期化されてしまうという制約があります。
再起動の都度インストールするのは手間なのと、必要なバージョンがaptリポジトリにあるとは限らないことから、今回はソースから$HOMEへインストールすることにしました。

スクリプト

以下スクリプトにて、ソースファイルのダウンロードからインストールまでを一括で実行します。

異なるPythonバージョンやマシン環境で実行する場合は、以降の解説を参考に、変数やオプションの値を適時変更して下さい。

#!/bin/sh
url=https://www.python.org/ftp/python/3.12.2/Python-3.12.2.tar.xz

curl -s $url | tar -xJ
cd Python-3.12.2

./configure --prefix="$HOME/.local" \
            --enable-optimizations \
            --with-lto \
            PROFILE_TASK="-m test --pgo --timeout=$(TESTTIMEOUT) -j8"

sudo make -j8
sudo make altinstall -j8

解説

url=https://www.python.org/ftp/python/3.12.2/Python-3.12.2.tar.xz

ソースファイルの入手先URLをurlに指定します。URLは公式ダウンロードサイトのリンクをコピーして下さい。

curl -s $url | tar -xJ
cd Python-3.12.2

ソースファイルをダウンロードして展開し、ディレクトリに移動します。ダウンロードファイルをディスクに保存せずパイプでtarに渡すことで、ダウンロードファイルを後で削除する手間を減らしています。

./configure --prefix="$HOME/.local" \
            --enable-optimizations \
            --with-lto \
            PROFILE_TASK="-m test --pgo --timeout=$(TESTTIMEOUT) -j8"

configureを実行します。--prefixを除く3つのオプションがコンパイラ最適化に関係するものです。

本記事では取り上げませんが、Python3.12からLLVM BOLTによる最適化も実験的にリリースされています。

sudo make -j8
sudo make altinstall -j8

ソースのコンパイルとインストールを実行します。それぞれに並列化オプションである-j8を指定します。

筆者の環境では、スクリプトの実行に13分ほどかかりました。成功すると、$HOME/.local/binに以下バイナリが保存されます。

$ ls $HOME/.local/bin
2to3-3.12  idle3.12  pip3.12  pydoc3.12  python3.12  python3.12-config

Python3.12を実行

インストールが成功したら、$PATH$HOME/.local/binを追加するコマンドを.bashrcに追記して反映します。

$ echo "PATH=$HOME/.local/bin/:$PATH" >> ~/.bashrc
$ source ~/.bashrc

Python3.12がインストールされたことを確認します。実行コマンドはPython3.12と、バージョン番号まで指定して下さい。

$ python3.12 -V
Python 3.12.2

ビルド時にコンパイラ最適化が有効化されたことを確認します。

$ python3.12
>>> from test.support import python_is_optimized
>>> python_is_optimized()
True

まとめ

本記事では、Python3.12のソースビルド方法とコンパイラ最適化を紹介させていただきました。機会があれば、Python3.13などのプレリリース版のビルドにもチャレンジしてみようと思います。

2
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
3