Debian 11 (bullseye) - Python 3.9 インストール(ソースビルド)!
Updated:
Debian GNU/Linux 11 (bullseye) に Python 3.9 をソースをビルドしてインストールする方法についての記録です。
以前古いバージョンでの作業時に残していた記録を参考に作業を行い、今回更新した作業記録を貼付する形式の内容となっています。
(当然ながら、興味がなければスルーしてください)
0. 前提条件
- Debian GNU/Linux 11.0.0 (bullseye; 64bit) での作業を想定。
- クライアント側も Debian GNU/Linux 11 (bullseye; 64bit) を想定。
- 当作業時で最新の 3.9.7 をソースをビルドしてインストールする。
- デフォルトでインストールされている 3.9.2 はアンインストールしない。
(既にインストール・設定済みのパッケージに影響がでないよう)
1. Python のバージョン確認
インストール済み(現状)の Python のバージョンを確認してみる。
# python3 -V
Python 3.9.2
--version
オプションでもよい。python3
はpython3.9
でもよい。
(python3
はpython3.9
にシンボリックリンクが張られているので)
2. 必要パッケージのインストール
# apt -y update
# apt -y 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
更に必要なものがある場合、make
後に出力されるメッセージで確認可能。(再度 make
する必要があるが)
(開発に不要なものなら無視してもよいだろう)
3. アーカイブのダウンロード&展開
こちら から 3.9 系の最新安定版(当記事執筆時点では 3.9.7)のアーカイブ(今回は tgz 版)をダウンロード・展開する。
# cd /usr/local/src
# wget https://www.python.org/ftp/python/3.9.7/Python-3.9.7.tgz
# tar xvf Python-3.9.7.tgz
4. ビルド&インストール
3.9 系以外のバージョンの Python と共存させるら、 --prefix
でインストール先を指定する。
また、あらゆるサイト等で紹介されている --enable-shared
のオプションは、メリットがない(むしろ問題点がある)ので使用しない。
# cd Python-3.9.7
# ./configure
# make -j$(grep '^processor' /proc/cpuinfo | wc -l)
# make install
もし、ビルドソースに問題がないか等をテストしたければ、 make
のあとで make test
でチェックしてみるとよい。
5. pip の更新
pip を最新版に更新しておく。
# pip3.9 -V
pip 21.2.3 from /usr/local/lib/python3.9/site-packages/pip (python 3.9)
# pip3.9 install --upgrade pip
# pip3.9 -V
pip 21.2.4 from /usr/local/lib/python3.9/site-packages/pip (python 3.9)
6. インストールの確認
(ログインし直してから)
# python3.9 -V
Python 3.9.7
# python3 -V
Python 3.9.7
# pip3 -V
pip 21.2.4 from /usr/local/lib/python3.9/site-packages/pip (python 3.9)
# pip3.9 -V
pip 21.2.4 from /usr/local/lib/python3.9/site-packages/pip (python 3.9)
7. 動作確認
対話形式で確認してみる。(ユークリッドの互除法で再帰的に最大公約数を求めてみる)
(対話形式を終了するには CTRL-D
)
# python3
Python 3.9.7 (default, Sep 19 2021, 10:19:01)
[GCC 10.2.1 20210110] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> def gcd(a, b):
... if b == 0:
... return a
... else:
... return gcd(b, a % b)
...
>>> print("TheGCD for (123, 45): {}".format(gcd(123, 45)))
TheGCD for (123, 45): 3
>>>
上記と同じことをファイルを作成して実行してみる。
File: gcd.py
1
2
3
4
5
6
7
def gcd(a, b):
if b == 0:
return a
else:
return gcd(b, a % b)
print("TheGCD for (123, 45): {}".format(gcd(123, 45)))
# python3 gcd.py
The GCD for (123, 45): 3
8. 参考サイト
以上
Comments