本記事ではPythonをソースからインストールする方法について解説します。
- 新たにインストールする場合
- バージョンアップする場合
基本的にどちらもやり方は同じですが、バージョンアップの場合はインストール先を意図的に変更しない限り、
- 2.7 -> 3.8、 3.7 -> 3.8といったメジャー(?)バージョンアップの場合は新規フォルダにインストール
- 3.8.4 -> 3.8.5といったマイナー(?)バージョンアップの場合は既存の上書きインストール
となります。
また、venvなどで作成した仮想環境は、新しいPythonバージョンで作成し直せばよいです。
自分でハマった点の解決策も交えて具体例も記載しながらまとめます。
事前準備(依存ファイルのインストール)
特に新規にPythonをインストールする場合は必要です。
こちらのサイト(python.jp) を参考にさせて頂きました。
参考までに、それぞれのモジュールの詳細については本記事の最後にリンクを載せておきます。
$ sudo apt update
$ sudo apt upgrade
$ sudo apt install build-essential libbz2-dev libdb-dev libreadline-dev libffi-dev libgdbm-dev liblzma-dev libncursesw5-dev libsqlite3-dev libssl-dev zlib1g-dev uuid-dev tk-dev
インストールし忘れると後で実行できない機能など出てきてしまうので注意。
下記は筆者が実際に遭遇した例です。。
- build-essential(実際にはこのモジュールに含まれているgcc)がインストールされておらず、ビルドができない。
エラーメッセージ例(configureスクリプト実行時)
configure: error: no acceptable C compiler found in $PATH
エラーメッセージ例(Pipインストール時)
There was a problem confirming the ssl certificate: HTTPSConnectionPool(host='pypi.org', port=443)
などなど。
このような事態になったら、該当するライブラリをインストールして再ビルドをします。
Pythonをソースからインストールする手順
インストールしたいVersionをダウンロード
Python公式サイトのダウンロードページ から入手出来ます。
下図の赤枠部をクリックするとダウンロードが始まります。

または、ターミナルからコマンド(例えば下記のようにcurl)でダウンロード出来ます。
$ curl -OL https://www.python.org/ftp/python/3.8.5/Python-3.8.5.tar.xz
他にも、同じページの少し下の方に各バージョン毎のダウンロードページがあります(下図赤枠部)

このページからは各プラットフォーム毎のファイルをダウンロード出来るようになっており、Linux向けは上記のtar.xz形式の他にtgz形式でもダウンロード出来るようになっています。

ダウンロードしたファイルを展開(解凍)
ダウンロードしたファイルを展開(解凍)します。
以下はコマンドラインで実行する例です。
- tar.xz形式でダウンロードした場合
$ tar Jxfv Python-3.8.5.tar.xz
$ tar xzf Python-3.8.5.tgz
configureスクリプトの実行
前記で展開したPythonディレクトリへ移動し、configureスクリプトを実行します。
configureスクリプトは、インストールに必要な環境やライブラリ等が揃っているかをチェックしMakeFileを生成します。
configure実行時のログはconfig.logに保存されます。何か問題があればこのログにエラーとして記述されている場合もあるので、チェックすると良いかもです。
$ cd Python-3.8.5 # Pythonディレクトリへ移動
~/Python-3.8.5$ ./configure # configureスクリプトを実行
checking build system type... x86_64-pc-linux-gnu
checking host system type... x86_64-pc-linux-gnu
:
:
config.status: creating pyconfig.h
creating Modules/Setup.local
creating Makefile # Makefileが出来上がりました。
If you want a release build with all stable optimizations active (PGO, etc),
please run ./configure --enable-optimizations
makeコマンドでコンパイル
makeコマンドを実行してコンパイルします。
makeコマンドは、前記のconfigureスクリプトから生成されたMakeFileに基づいてコンパイルを実施し、実行可能ファイルを生成します。
~/Python-3.8.5$ make # makeコマンドを実行
gcc -pthread -c -Wno-unused-result -Wsign-compare -DNDEBUG -g -fwrapv -O3 -Wall -std=c99 -Wextra -Wno-unused-result -Wno-unused-parameter -Wno-missing-field-initializers -Werror=implicit-function-declaration -I./Include/internal -I. -I./Include -DPy_BUILD_CORE -o Programs/python.o ./Programs/python.c
:
:
gcc -pthread -c -Wno-unused-result -Wsign-compare -DNDEBUG -g -fwrapv -O3 -Wall -std=c99 -Wextra -Wno-unused-result -Wno-unused-parameter -Wno-missing-field-initializers -Werror=implicit-function-declaration -I./Include/internal -I. -I./Include -DPy_BUILD_CORE -o Programs/_testembed.o ./Programs/_testembed.c
gcc -pthread -Xlinker -export-dynamic -o Programs/_testembed Programs/_testembed.o libpython3.8.a -lcrypt -lpthread -ldl -lutil -lm -lm
sed -e "s,@EXENAME@,/usr/local/bin/python3.8," < ./Misc/python-config.in >python-config.py
LC_ALL=C sed -e 's,\$(\([A-Za-z0-9_]*\)),\$\{\1\},g' < Misc/python-config.sh >python-config
なんらかの依存ファイルが足りないなど何か問題がある時はこのログに記載される場合があります。
以下は、筆者が遭遇したlibssl-devモジュールがインストールされていなかった為に出てきたエラーメッセージです。
Could not build the ssl module!
Python requires an OpenSSL 1.0.2 or 1.1 compatible libssl with X509_VERIFY_PARAM_set1_host().
LibreSSL 2.6.4 and earlier do not provide the necessary APIs, https://github.com/libressl-portable/portable/issues/381
make altinstallコマンドでインストール
make altinstallコマンドを実行してインストールします。
make installコマンドは、makeで生成された実行可能ファイルを規定のディレクトリにコピー(インストール)します。
また、ここではPython公式リファレンスの下記のコメントに従い、make installの代わりにmake altinstallを使っています。
make install は python3 バイナリを上書きまたはリンクを破壊してしまうかもしれません。そのため、make install の代わりに exec_prefix/bin/pythonversion のみインストールする make altinstall が推奨されています。
尚、Pythonが入っていない環境に対して最初にインストールする際はmake installでも問題無いと思います。
~/Python-3.8.5$ sudo make altinstall # sudo付けるの忘れずに
if test "no-framework" = "no-framework" ; then \
/usr/bin/install -c python /usr/local/bin/python3.8; \
else \
/usr/bin/install -c -s Mac/pythonw /usr/local/bin/python3.8; \
fi
:
:
Looking in links: /tmp/tmpfwxw96y2
Processing /tmp/tmpfwxw96y2/setuptools-47.1.0-py3-none-any.whl
Processing /tmp/tmpfwxw96y2/pip-20.1.1-py2.py3-none-any.whl
Installing collected packages: setuptools, pip
Successfully installed pip-20.1.1 setuptools-47.1.0
これでインストール作業は完了です。
下記で確認しましょう。
Pythonのバージョンの確認
$ python3.8 --version
Python 3.8.5
Pythonを起動してみます。
$ python3.8
Python 3.8.5 (default, Aug 16 2020, 20:17:24)
[GCC 7.5.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> print('hello')
hello
(参考)依存ファイルの中身について
事前準備のところに挙げた依存ファイルの中身など詳細は下記で参照出来ます。
- build-essential : Informational list of build-essential packages
- libbz2-dev :high-quality block-sorting file compressor library – development
- libdb-dev : Berkeley Database Libraries [development]
- libreadline-dev : GNU readline and history libraries, development files
- libffi-dev : Foreign Function Interface library (development files)
- libgdbm-dev : GNU dbm database routines (development files)
- liblzma-dev : XZ-format compression library – development files
- libncursesw5-dev : developer’s libraries for ncursesw
- libsqlite3-dev : SQLite 3 development files
- libssl-dev : Secure Sockets Layer toolkit – development files
- zlib1g-dev : compression library – development
- uuid-dev : Universally Unique ID library – headers and static libraries
- tk-dev : Toolkit for Tcl and X11 (default version) – development files
環境
- OS: Ubuntu18.04LTS
- Python3.8.5
まとめ
Pythonのインストール方法についてまとめました。
パッケージをソースからインストールするのは初心者には少しハードルが高く感じるかもしれませんが、ステップごとに説明を付けて各コマンドが何をしているのかが分かるようにしました。