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 オプションでもよい。
  • python3python3.9 でもよい。
    python3python3.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. 参考サイト


以上





 

Sponsored Link

 

Comments