Python をソースコードからビルドする

Python のビルド方法解説ページのアイキャッチ

このページにはプロモーションが含まれています

このページでは特に MacOS ユーザー向けに Python をソースコードからビルドする方法を解説します。

Python 本体や Python に付属する標準ライブラリやモジュールは元々 C言語で記述されているものが多いです。

このページではそのソースコードをコンパイルしてリンクし、Python 本体や付属するライブラリやモジュールを自分で作成する方法について解説します。

デバッグ情報付きのライブラリが作成することができ、さらにソースコードも入手できますので、下記で解説した OpenCV 同様に Python 本体やライブラリをデバッグ(ステップ実行)することもできるようになります。

PythonとOpenCVの混合デバッグ方法解説ページのアイキャッチ VSCode で Python と OpenCV を混合でデバッグ(ステップ実行)する方法!

Python をソースコードからビルドする手順

Python をソースコードからビルドする手順は大きく分けると下記の2つになります

  • ソースコードの入手
  • ビルドの実行
  • 動作確認

ソースコードの入手

まずはソースコードを入手します。

スポンサーリンク

GitHub のサイトから最新のソースコードを入手する方法

ソースコードは GitHub 上にありますので、下記の手順でソースコードを入手することができます。

  • 下記の GitHub のサイトにアクセス
    • https://github.com/python/cpython
  • 緑色の「Clone or Download」ボタンをクリック
    最新版Pythonソースコードの入手
  • 「Download ZIP」を選択

git コマンドで最新のソースコードを入手する方法

git コマンドが利用できる環境であれば、下記コマンドによりソースコードを入手することができます。

git clone https://github.com/python/cpython

GitHub のサイトから特定バージョンのソースコードを入手する方法

下記の手順により特定のバージョンを選択してソースコードを入手することも可能です。

  • 下記の GitHub のサイトにアクセス
    • https://github.com/python/cpython
  • ダウンロードしたいバージョンを選択する
    バージョンの選択

    • 上図の xx branches をクリック
    • ダウンロードしたいバージョンを選択
  • 「Clone or Download」ボタンをクリック
  • 「Download ZIP」を選択

branches からではなく、releases からバージョンを選択したり、各ファイルの History からバージョンを選択して入手することも可能です。

スポンサーリンク

git コマンドで特定バージョンのソースコードを入手する方法

最新バージョンではなく、特定のバージョンを指定してソースコードを入手したい場合は、git コマンドで下記のように -b オプションを用いてブランチ名やタグ名を指定します。

git clone https://github.com/python/cpython -b 3.9

具体的に指定するブランチ名やタグ名は、下図の xx branchs や xx releases をクリックすることで確認できます。

バージョンの選択

クリックして表示される名前を -b オプションに指定します。

例えば releases をクリックした場合は、下の図のような画面でタグ名の一覧が表示されます。

タグ名の指定

例えば v3.8.3 をダウンロードするのであれば、git コマンドを下記のように実行します。

git clone https://github.com/python/cpython -b v3.8.3
MEMO

バージョンやダウンロードしたタイミングによってはソースコード等に不備があって上手くビルドできないことがあるので注意してください

ビルドの実行

ソースコードが入手できれば次はビルドを行います。

ビルドはターミナル上で行いますので、まずはターミナルアプリを開き、cd コマンドを利用してダウンロードしたソースコードのあるフォルダに移動します。

ls コマンドを実行すれば、下記のようなファイルが存在することを確認できるはずです。

$ ls
CODE_OF_CONDUCT.md	Makefile.pre.in		Programs		configure
Doc			Misc			Python			configure.ac
Grammar			Modules			README.rst		install-sh
Include			Objects			Tools			m4
LICENSE			PC			aclocal.m4		pyconfig.h.in
Lib			PCbuild			config.guess		setup.py
Mac			Parser			config.sub

configure 実行

まずは configure を実行してビルドの設定を行います。

configure を実行することにより、オプション等で指定した設定に応じた Makefile を生成し、次の節で説明する make コマンドを実行できるようになります。

configure はターミナルで下記コマンドにより実行することができます。

./configure オプション

オプションは指定しなくてもおそらくビルドは行えると思いますが、必要に応じて下記は指定しておいて良いと思います。

  • --prefix
  • --with-tcltk-includes
  • --with-tcltk-libs
  • --with-pydebug

--prefix

--prefix を指定することで、make install コマンド実行時に、ビルドした Python の実行ファイル(bin ファイル)やライブラリファイル(.so など)をどのフォルダにインストールするかを設定することができます。

指定する場合は下記のように --prefix の後ろにインストール先のフォルダパスを指定します。

./configure --prefix /Users/daeu/.pyenv/versions/3.10.0/

これにより、ビルドして生成されたファイルが make install コマンド実行時に「/Users/daeu/.pyenv/versions/3.10.0/」にインストールされるようになります。

指定しなかった場合は下記のパスにビルドした実行ファイルやライブラリがインストールされます。

/usr/local

このパスにインストールするので良ければこのオプションの指定は不要です。

--with-tcltk-includes

これは tkinter モジュールをビルドする際に、必要に応じて指定した方が良いオプションになります。

tkinter は Tcl や Tk というモジュールを利用して動作するモジュールになります。

--with-tcltk-includes は、この tkinter にどの Tcl や Tk を利用させるかを指定するオプションになります。

具体的には Tcl や Tk のヘッダーファイルが存在するフォルダを指定します。

オプションを指定せずにビルドをすると tkinter が古いバージョンの Tcl や Tk を利用しようとしたり、ビルド時にエラーになったりしますので、必要に応じてオプションを指定しておくと良いと思います。

私の PC では下記の場所に Tcl や Tk のヘッダーファイルが存在しますので、

/usr/local/Cellar/tcl-tk/8.6.10/include

下記のように configure にオプションを指定しました。

/configure --with-tcltk-includes="-I/usr/local/Cellar/tcl-tk/8.6.10/include"

--with-tcltk-libs

--with-tcltk-includes 同様に tkinter にどの Tcl や Tk を利用させるかを指定するオプションになります。こちらの --with-tcltk-libs ではリンクさせるライブラリを指定します。

通常 --with-tcltk-includes と合わせてオプションを指定します。

私の PC では下記の場所に Tcl のライブラリファイルが存在し、

/usr/local/Cellar/tcl-tk/8.6.10/lib/libtcl8.6.dylib

下記の場所に Tk のライブラリファイルが存在するため、

/usr/local/Cellar/tcl-tk/8.6.10/lib/libtk8.6.dylib

下記のように configure にオプションを指定しました。

./configure --with-tcltk-includes="-I/usr/local/Cellar/tcl-tk/8.6.10/include" --with-tcltk-libs="-lm /usr/local/Cellar/tcl-tk/8.6.10/lib/libtcl8.6.dylib -lm /usr/local/Cellar/tcl-tk/8.6.10/lib/libtk8.6.dylib"

--with-pydebug

デバッグビルドを行いたい場合はこのオプションを指定します。

このオプションを指定しなくても、C言語ソースコードのコンパイル時に -g オプションが設定されるのでデバッガーを利用してステップ実行することは可能かもしれないです。

ただこのオプションを指定しないと最適化が働いてしまうので上手くステップ実行できない場合もあります。

そんな時はこの --with-pydebug オプションを指定すると良いと思います。

--with-pydebug は引数なしで configure に指定するだけで良いです。

./configure --with-pydebug

ここまで解説してきた4つのオプション全てを指定した場合の configure 実行時のコマンドは下記のようになります。

./configure --prefix /Users/daeu/.pyenv/versions/3.10.0 --with-tcltk-includes="-I/usr/local/Cellar/tcl-tk/8.6.10/include" --with-tcltk-libs="-lm /usr/local/Cellar/tcl-tk/8.6.10/lib/libtcl8.6.dylib -lm /usr/local/Cellar/tcl-tk/8.6.10/lib/libtk8.6.dylib" --with-pydebug
MEMO

(2021/9/8 追記)

最近また Python ソースコードをビルドしようとして configure を試したら、下記のようなエラーが出るようになってしまいました…

checking size of long double... configure: error: in `/Users/daeu/Documents/cpython/cpython':
configure: error: cannot compute sizeof (long double)
See `config.log' for more details
configure: error: check config.log and use the '--with-universal-archs' option

どうもこのエラーが出るのは Xcode コマンドラインツールが古い?からのようで、下記の2つのコマンドで再インストールしたらエラーが出なくなりました(1行目で Xcode コマンドラインツールの削除、2行目で Xcode コマンドラインツールのインストール)

$ sudo rm -r /Library/Developer/CommandLineTools
$ xcode-select --install

同様の現象が発生した方や、他のエラーが発生した場合でも、上記を試すとうまくいくようになるかもしれないです

スポンサーリンク

make 実行

configure を実行することで、オプション指定に応じた Makefile が作成されます。

あとは make コマンドで実際のビルドを行っていきます。

make はターミナル上で下記コマンドを実行すれば良いだけです。

make

make install 実行

make コマンドを実行することにより、ソースコードがコンパイルされて Python 本体やライブラリファイルが生成されます。

これらを make install コマンドにより PC にインストールします(インストールは configure のオプション --prefix で指定したフォルダに行われます)。

同時にダウンロードした .py ファイルもインストールされます。

make install はターミナル上で下記コマンドを実行すれば良いだけです。

make install

これにより configure のオプション --prefix で指定したフォルダの下に下記のように bin、lib、include、share フォルダが作成されます。

bin	include	lib	shar

bin フォルダには Python 本体、lib フォルダには付属のモジュールのライブラリなどがインストールされています。

PATH の設定

必要に応じてインストールした Python に PATH を設定しておくと便利です。

.bash_profile の最後に下記の PATH の設定を追記しておけば、ターミナルなどで python3 コマンド実行時にビルドした Python が実行されるようになります。

PATH="インストール先フォルダ/bin:${PATH}"
export PATH

インストール先フォルダの部分には --prefix で指定したパスを指定します。

私は「Users/daeu/.pyenv/versions/3.10.0」にビルドした Python をインストールしたので、下記を追記しました。

PATH="/Users/daeu/.pyenv/versions/3.10.0/bin:${PATH}"
export PATH

追記後はターミナルアプリを一旦終了し、再度起動して設定を反映しましょう!

スポンサーリンク

動作確認

最後にビルドした Python を動かしてみましょう!

PATH の設定を行ったのであれば、下記のようにターミナルで python3 コマンドを実行することでビルドした Python が起動するはずです。

$ python3
Python 3.10.0a0 (heads/master-dirty:dea3223740, Jun 14 2020, 20:21:23) 
[Clang 11.0.0 (clang-1100.0.33.17)] on darwin
Type "help", "copyright", "credits" or "license" for more information.

黄色背景部分はビルドした Python のバージョンが記載されているはずです。

quit() を実行すれば Python を終了させることができます。

PATH を設定していないのであれば、インストールしたフォルダの下の bin の python3 を実行してみましょう。

上記と同じようなメッセージが表示されるはずです。

$ /Users/daeu/.pyenv/versions/3.10.0/bin/python3
Python 3.10.0a0 (heads/master-dirty:dea3223740, Jun 14 2020, 20:21:23) 
[Clang 11.0.0 (clang-1100.0.33.17)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> 

PATH を設定している場合は、VSCode 等からもビルドした Python のバージョンを選択できるようにもなるはずです。

自身でビルドした Python を利用すれば、自身でビルドした標準ライブラリが使用されるようになります。

さらに、自身でビルドした標準ライブラリ(特にC言語ソースコードから生成されるライブラリ)にはデバッグ情報が含まれていますので、下記ページで OpenCV をデバッグ・ステップ実行したのと同様の手順で、Python の標準ライブラリもデバッグ(ステップ実行)することが可能です。

PythonとOpenCVの混合デバッグ方法解説ページのアイキャッチ VSCode で Python と OpenCV を混合でデバッグ(ステップ実行)する方法!

下のアニメは Python 標準ライブラリの1つである tkinter(_tkinter.c)をステップ実行してみた例になります。

_tkinter.cをステップ実行する様子

まとめ

このページでは Python をソースコードからビルドする方法について解説しました。

Python を自分でビルドできるようになれば、最新の Python をいち早くお試しで利用することもできますし、標準ライブラリをステップ実行することも簡単に行えることができます!

簡単なコマンドで行うことができますので、是非ビルドを試してみてください!

同じカテゴリのページ一覧を表示