(Ubuntu)Python3.9.1をソースからインストールする(Vagrant)

VagrantのUbuntu20.04上に最新版(2021/1/21時点)のPython3.9.1をソースからインストールする方法について説明しています。

目的と環境

最終更新日:2021/4/20

VagrantでUbuntu20.04の仮想マシンを作成・起動して、そこにPythonの最新バージョン3.9.1(2021/1/21時点)をソースからインストールしていきます(Ubuntu18.04でも同じ手順でできます)。

◾️環境とバージョン情報です。
ホストPCのOS:macOS Big Sur(バージョン11.1)
Vagrant 2.2.7
VirtualBox 6.1.16

$ vagrant -v
Vagrant 2.2.7

$ VirtualBox -h
Oracle VM VirtualBox VM Selector v6.1.16

VagrantとVirtualBoxをインストールしてある事が前提で説明していきます。

Ubuntu 20.04 LTS(18.04 LTS)のBoxをダウンロードして、仮想マシンを作成・起動する

まずは最新版のPythonをインストールするための仮想マシンを用意します。仮想マシンはVagrantを使って作ります。
VagrantでUbuntu20.04のBoxを取得し、そのBoxから仮想マシンを作成して起動するまでをやります。

ただ、Ubuntu20.04の仮想マシンの作成から起動までは別ページで説明していますので、そちらを参考にしていただければと思います。
Ubuntu 20.04 LTSのBoxをダウンロードして、仮想マシンを作成・起動する

Ubuntu18.04の場合についても別ページで説明していますので、Ubuntu18.04を使いたい方はそちらを参考にしてみてください。
Ubuntu 18.04 LTSのBoxをダウンロードして、仮想マシンを作成・起動する

Ubuntu 20.04にPython3.9.1をソースからインストールする

それではPython3.9.1(2021/1/21時点の最新版)をインストールしていきます。これ以降については、Ubuntu 20.04上でやった事を書いていきます(*Ubuntu 18.04でも同じ手順でできます)。

まず初めてUbuntuにログインしたら、aptパッケージを更新しておきます(apt updateとapt upgrade)。

vagrant@vagrant:~$ sudo apt update
Get:1 http://security.ubuntu.com/ubuntu focal-security InRelease [109 kB]               
Hit:2 http://archive.ubuntu.com/ubuntu focal InRelease             
〜
24 packages can be upgraded. Run 'apt list --upgradable' to see them.

vagrant@vagrant:~$ sudo apt upgrade -y
Reading package lists... Done
Building dependency tree       
Reading state information... Done
Calculating upgrade... Done
The following NEW packages will be installed:
  linux-image-5.4.0-64-generic linux-modules-5.4.0-64-generic linux-modules-extra-5.4.0-64-generic
The following packages will be upgraded:
〜
あとUbuntuには最初からPythonが入っていますので、現環境のPythonのバージョンなどを最初に確認しておきます。
vagrant@vagrant:~$ python -V
-bash: python: command not found

vagrant@vagrant:~$ python3 -V
Python 3.8.5

vagrant@vagrant:~$ which python3
/usr/bin/python3

vagrant@vagrant:~$ pip -V
-bash: pip: command not found

vagrant@vagrant:~$ pip3 -V
-bash: pip3: command not found
Python3.8.5が最初から入っていました。わりと新しいです。
あとpython3コマンドは実行できるけど、pythonコマンドができないですね。pipも使えないです。

それではソースからPython3.9.1をインストールしていきます。

apt installコマンドでpython3.9をインストールできましたが、バージョンが3.9.0だったので、今回はソースから最新バージョンの3.9.1をインストールしていきたいと思います。

ソースはこちらのページからダウンロードできます(Sourceタブを選択する)。
Pythonの最新版をソースからインストール

ここではwgetコマンドでダウンロードします。

vagrant@vagrant:~$ wget https://www.python.org/ftp/python/3.9.1/Python-3.9.1.tar.xz
--2021-01-20 17:31:21--  https://www.python.org/ftp/python/3.9.1/Python-3.9.1.tar.xz
Resolving www.python.org (www.python.org)... 151.101.88.223
Connecting to www.python.org (www.python.org)|151.101.88.223|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 18897104 (18M) [application/octet-stream]
Saving to: ‘Python-3.9.1.tar.xz’

Python-3.9.1.tar.xz                100%[================================================================>]  18.02M  13.3MB/s    in 1.4s    

2021-01-20 17:31:22 (13.3 MB/s) - ‘Python-3.9.1.tar.xz’ saved [18897104/18897104]
また、必要なライブラリをaptでインストールしておきます。
$ sudo apt install -y 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
次に、ダウンロードしたソースファイルをtarで展開し、展開されたディレクトリに移動します。
vagrant@vagrant:~$ tar xJf Python-3.9.1.tar.xz 

vagrant@vagrant:~$ ls
Python-3.9.1  Python-3.9.1.tar.xz

vagrant@vagrant:~$ cd Python-3.9.1
vagrant@vagrant:~/Python-3.9.1$ 
そして、ビルドとインストールをします。
vagrant@vagrant:~/Python-3.9.1$ ./configure 
〜
vagrant@vagrant:~/Python-3.9.1$ make
〜
vagrant@vagrant:~/Python-3.9.1$ sudo make install
〜
これで、python3.9.1がインストールできたはずです。
最新のシェル環境を反映させるために、下のexecコマンドを実行します(仮想マシンにログインし直しても大丈夫です)。
vagrant@vagrant:~/Python-3.9.1$ exec "$SHELL"
確認してみます。
vagrant@vagrant:~$ python -V
-bash: python: command not found

vagrant@vagrant:~$ python3 -V
Python 3.9.1

vagrant@vagrant:~$ pip -V
-bash: pip: command not found

vagrant@vagrant:~$ pip3 -V
pip 20.2.3 from /usr/local/lib/python3.9/site-packages/pip (python 3.9)
Python3.9.1が使えるようになりました!またpipも一緒にインストールされています。

ただ、pythonコマンドとpipコマンドは使えないので、pythonコマンドで使えるようにしたい場合は、aliasで設定しておくと良いと思います。 ~/.bashrcファイルの最後にでもこの2行を追記します。

alias python="python3"
alias pip="pip3"
追記したら、再度execコマンドで設定を反映させます。
vagrant@vagrant:~$ exec "$SHELL"
コマンドを使用できるかを確認します。
vagrant@vagrant:~$ python -V
Python 3.9.1

vagrant@vagrant:~$ pip -V
pip 20.2.3 from /usr/local/lib/python3.9/site-packages/pip (python 3.9)
できました!

Pythonをインタラクティブモードで使ってみる。動作確認

せっかくPythonをインストールしたので、インタラクティブモードで少し使ってみます。
インタラクティブモードにはpythonコマンドで入れます。

vagrant@vagrant:~$ python
Python 3.9.1 (default, Jan 20 2021, 17:47:56) 
[GCC 9.3.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>>
計算をしたり、文字列を表示したり、カレンダーを表示してみます。
>>> 100 + 200 / 2
200.0
>>> print("Hello", "world!!!")
Hello world!!!
>>> import calendar
>>> print(calendar.month(2020, 12))
   December 2020
Mo Tu We Th Fr Sa Su
    1  2  3  4  5  6
 7  8  9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31

>>> quit()
vagrant@vagrant:~$ 
インタラクティブモードから抜ける時は、"quit()"と入力するか、ショートカット"Ctrl + D"でできます。

pyenv + Pythonの環境を構築するという方法もある

以上簡単でしたが、Ubuntu上にPython3.9.1をソースからインストールする手順について説明しました。

ここでは直接ソースからPythonをインストールしましたが、Pythonをインストールする方法としてpyenvを使う方法もあります。

pyenvは、Pythonのシンプルなバージョン管理ツールです。様々なバージョンのPythonをインストールする事ができて、インストールしたバージョンを手軽に切り替える事が可能です。これによりPythonで何か作る時に、最新バージョンで試したり、過去のバージョンで試したりする事ができるようになります。

pyenv + Pythonの環境構築については別ページで説明してますので、そちらも参考にしていただければと思います。
(Ubuntu)Python3.9.1とpyenvをインストールする(Vagrant)
(macOS)pyenvとPython3.9をインストールする

参考サイト

Ubuntu環境のPython