Ubuntu 22.04にPython3.xを複数インストールして切り替える方法（PPA・apt）


# はじめに

本書では、Ubuntu 22.04に、Pythonの環境をインストールする方法をまとめます。
※2023/03/20 これまでUbuntu 20.04で書いていましたが、Ubuntu 22.04で確認しました。

案件によってPythonのバージョンが違うこともあるため、複数のバージョンをインストールして、alternativesで切り替えられるようにします。

また、Pythonインストール後には、venvで、アプリケーション等で使用する環境を作成することとします。

本書では、Python 3.8がもともと入っているため、3.6、3.7、3.9、更に、古いアプリを動かすために2.7もインストールすることを想定します。
インストールした中で、最新の3.9を有効にし、「newest」という環境をvenvで作成する手順をまとめます。

# インストール手順
## aptパッケージを更新する

```bash
sudo apt update
sudo apt upgrade -y
```

## (パッケージ管理でpipを使う場合) pipインストール

下記手順ではpipがインストールされていないので、インストールします。

```bash
sudo apt install -y python3-pip
```

インストールしたらバージョンを確認します。

```bash
pip3 -V
```

```txt
pip 22.0.2 from /usr/lib/python3/dist-packages/pip (python 3.10)
```

のように、エラーなどにならず、バージョンが表示されれば成功です。

## リポジトリ追加

```bash
sudo apt install -y software-properties-common
sudo add-apt-repository ppa:deadsnakes/ppa
```

```txt
For nightly builds, see ppa:deadsnakes/nightly https://launchpad.net/~deadsnakes/+archive/ubuntu/nightly
 More info: https://launchpad.net/~deadsnakes/+archive/ubuntu/ppa
Press [ENTER] to continue or Ctrl-c to cancel adding it.
```

と表示されたら`Enter`キーを押します。

## apt update

```bash
sudo apt update
```

## インストール可能なPythonのバージョンを確認

```bash
sudo apt list python3.*
```

```txt
python3.10-dbg/jammy-updates,jammy-security 3.10.6-1~22.04.2 amd64
python3.10-dev/jammy-updates,jammy-security,now 3.10.6-1~22.04.2 amd64 [installed,automatic]
python3.10-doc/jammy-updates,jammy-security 3.10.6-1~22.04.2 all
python3.10-examples/jammy-updates,jammy-security 3.10.6-1~22.04.2 all
python3.10-full/jammy-updates,jammy-security 3.10.6-1~22.04.2 amd64
python3.10-minimal/jammy-updates,jammy-security,now 3.10.6-1~22.04.2 amd64 [installed,automatic]
python3.10-nopie/jammy-updates,jammy-security 3.10.6-1~22.04.2 amd64
python3.10-venv/jammy-updates,jammy-security 3.10.6-1~22.04.2 amd64
python3.10/jammy-updates,jammy-security,now 3.10.6-1~22.04.2 amd64 [installed,automatic]
```

のように、インストール可能なPython3.xのaptパッケージが表示されますので、インストールするバージョンを決定します。

## Python 各バージョンインストール

（例）Python 3.9が最新で、2.7、3.6、3.7をインストールする場合

```bash
sudo apt install -y python3.9 python3.9-venv
sudo apt install -y python3.7 python3.7-venv
sudo apt install -y python3.6 python3.6-venv
sudo apt install -y python2.7 python2.7-venv
```

※venvで仮想環境を分けるため、`pythonX.X-venv`もインストールしています。
※pipでmysqlclientなどをインストールして、ビルドが必要になる場合、エラーになるケースがあります。その場合は、`pythonX.X-dev`もインストールしてみてください。

# alternativesでバージョン切り替え
## 定義

```bash
sudo update-alternatives --install /usr/bin/python python /usr/bin/python3.9 130
sudo update-alternatives --install /usr/bin/python python /usr/bin/python3.8 120
sudo update-alternatives --install /usr/bin/python python /usr/bin/python3.7 110
sudo update-alternatives --install /usr/bin/python python /usr/bin/python2.7 10
```

## 切り替え方法
### Priorityを選択して切り替える方法

```bash
sudo update-alternatives --config python
```

```txt
There are 5 choices for the alternative python (providing /usr/bin/python).

  Selection    Path                Priority   Status
------------------------------------------------------------
* 0            /usr/bin/python3.9   130       auto mode
  1            /usr/bin/python2.7   10        manual mode
  2            /usr/bin/python3.6   100       manual mode
  3            /usr/bin/python3.7   110       manual mode
  4            /usr/bin/python3.8   120       manual mode
  5            /usr/bin/python3.9   130       manual mode

Press <enter> to keep the current choice[*], or type selection number: 
```

のように表示されるので、`Selection`の番号を入れて`Enter`キーを押すと、そのバージョンが有効になります。
※上記はPython 3.9が有効になっている状態です。

```bash
python -V
```

```txt
Python 3.9.6
```

のように、選択したバージョンになっていればOKです。

### コマンドで直接設定する方法

3.9を有効にする場合：

```bash
sudo update-alternatives --set python /usr/bin/python3.9
```

```bash
python -V
```

```txt
Python 3.9.6
```

のように、選択したバージョンになっていればOKです。

# venv (Python 3.x以降)

※ここでは、Python 3.9に`newest`という環境を作る手順をまとめます。

## Pythonのバージョンを選択

```bash
sudo update-alternatives --config python
```

Python3.9のバージョンを`Selection`の番号で指定します。

## venv定義のディレクトリ作成


```bash
mkdir -p ~/venv/python3.9
```

## 環境を作成

ここでは、ホームディレクトリ以下全体で使用する`newest`という環境名を定義します。

```bash
cd ~/venv/python3.9/
```

次に、venv環境を作成します。

```bash
python -m venv newest
```

## 作成した環境を有効化

```bash
source ~/venv/python3.9/newest/bin/activate
```

※プロンプトの左端に`(newest)`のように環境名が表示されれば、正しく参照されています。

## (パッケージ管理でpipを使う場合) pip更新

```bash
python -m pip install --upgrade pip
```

## (パッケージ管理でpipを使う場合) pipパッケージインストール

利用したいパッケージをインストールします。

```bash
python -m pip install {パッケージ名}
```