RHEL7でPython2系を更新する

RHEL7(Red Hat Enterprise Linux 7)でPython2系をバージョンアップする方法について書いておきます。

# 注意点

Python2系は2020年1月1日でEOLを迎えており、Python2の最後のリリースは2020年4月20日のバージョンとなっています。  
そのため、そもそもPython2のバージョンアップが必要な状況はほとんどないでしょう。

[Python Release Python 2.7.18 | Python.org](https://www.python.org/downloads/release/python-2718/)

また、RHELも8がリリースされていることから7を使う機会は少ないと思われます。

とはいえ、検証をおこなうために古いバージョンを使わないといけないこともあるでしょう、ということでおこなった作業と参考にした内容を書いておきます。

最後に、デフォルトでインストールされているPython2は弄らないようにします。
システムで使われているものなので、どのような影響が出るかわからないためです。

# 環境

- RHEL7.7
- Python2.7.5（デフォルトでインストール）

RHEL7で実行できたので、CentOS7でも実行できると思います。

# 手順

以下の記事を参考に進めます。

- [(参考) Python 2.7.15 を RHEL にインストールして統合サーバーを構築する方法](https://www.ibm.com/support/pages/%E5%8F%82%E8%80%83-python-2715-%E3%82%92-rhel-%E3%81%AB%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB%E3%81%97%E3%81%A6%E7%B5%B1%E5%90%88%E3%82%B5%E3%83%BC%E3%83%90%E3%83%BC%E3%82%92%E6%A7%8B%E7%AF%89%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95)

ひとまず、デフォルトのPythonのバージョンを確認します。  
おそらく2.7.5だと思います。

```
$ python -V
```

## 必要パッケージのインストール

以下のコマンドで必要なパッケージをインストールします。

```
$ sudo yum install wget
$ sudo yum install gcc openssl-devel bzip2-devel
```

## Python2.7.18の取得

`yum install python`では2.7.5しかインストールできないので、Pythonのtgzファイルを取得します。先程インストールしたwgetをここで使います。  
ダウンロードしたファイルを展開します。

```
$ wget https://www.python.org/ftp/python/2.7.18/Python-2.7.18.tgz
$ tar xzf Python-2.7.18.tgz
```

## Python2.7.18のインストール

展開したフォルダに移動して、`make altinstall`をおこないます。  
参考の記事にも書かれている通り、デフォルトでインストールされているPythonを弄らないように別の場所（この場合は`/user/local/bin`）にインストールします。

```
$ cd Python-2.7.18
$ ./configure --enable-optimizations
$ sudo make altinstall
$ sudo ln -s /usr/local/bin/python2.7 /usr/local/bin/python
```

## 確認

上のコマンドが完了したら、いったん確認します。Pythonがインストールできているか、そしてそのバージョンの確認です。  
2.7.18と表示されるはずです。

```
$ /usr/local/bin/python -V
```

さらに、以下のコマンドを実行します。最初に確認したコマンドと同じです。このコマンドの結果は2.7.18ではない可能性があります。  
先程インストールした`/usr/local/bin/`にPATHが通っていない、もしくは後になっていると考えられます。

```
$ python -V
```

現状のpythonコマンドの実行ファイルを確認してもよいかもしれません。  
おそらくデフォルトの`/usr/bin`となっているでしょう。

```
$ which python
```

また、PATHを確認します。

```
$ echo $PATH
```

環境変数を管理している`/etc/profile`ファイルを編集してPATHに追加します。  
ファイル末尾に以下を追記するだけで問題ないと思います。

```
PATH=/usr/local/bin/:$PATH
```

Pythonのバージョンアップ自体はこれで完了です。  
pipをインストールするのであれば以下の作業を続けます。

## pipのインストール

参考にしてきたIBMのサイトでもpipのインストール方法が紹介されていますが、このままではインストールができません。
pipも現在はPython3に対応しており、取得した`get-pip.py`がPython2系ではSyntaxErrorになってしまうためです。以下のコマンドで対応したバージョンのpipをインストールしましょう。

```
$ curl "https://bootstrap.pypa.io/2.7/get-pip.py" -o "get-pip.py"
$ sudo /usr/local/bin/python get-pip.py
```

必要であればシンボリックリンクを作成しておき、pipコマンドが使えるようにしておきます。

```
$ sudo ln -s /usr/local/bin/pip /usr/bin/pip
```

# 参考

- [(参考) Python 2.7.15 を RHEL にインストールして統合サーバーを構築する方法](https://www.ibm.com/support/pages/%E5%8F%82%E8%80%83-python-2715-%E3%82%92-rhel-%E3%81%AB%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB%E3%81%97%E3%81%A6%E7%B5%B1%E5%90%88%E3%82%B5%E3%83%BC%E3%83%90%E3%83%BC%E3%82%92%E6%A7%8B%E7%AF%89%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95)
- [(参考) RHEL に Python 2.7.x をインストールして統合サーバーを構築する方法](https://www.ibm.com/support/pages/%E5%8F%82%E8%80%83-rhel-%E3%81%AB-python-27x-%E3%82%92%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB%E3%81%97%E3%81%A6%E7%B5%B1%E5%90%88%E3%82%B5%E3%83%BC%E3%83%90%E3%83%BC%E3%82%92%E6%A7%8B%E7%AF%89%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95): 上とほとんど同じ内容ですが、コマンドの改行位置がおかしくなっています。
- [Python2 で get-pip.py で SyntaxError - Qiita](https://qiita.com/Gro/items/34506dda61d0870c24f6)