前置き
Python2.x系から3.x系にあげる際に、yumなどpython2.x系に依存したパッケージソフトがあると、該当のパッケージソフトが使用できなくなるケースがある。
Python2.7がインストールされているCentOSに対して、
RHSCLを使用して複数のPythonを共存させ、Pythonのバージョンを2.x系→3.x系へ切り替える手順について、記載する。
RHSCL (Red Hat Software Collections) とは
CentOS向けの比較的バージョンの新しい安定版のパッケージソフトを集めたソフトウェア集。
RHEL/CentOSは、企業向けなので、
提供するパッケージを頻繁にアップデートするのではなく、特定のバージョンのパッケージを長期間に提供する、というポリシーがある.
そのため、提供されているパッケージが古い。
RHSCLは、RHEL/CentOSで提供しているパッケージより新らしく、なおかつ安定しているバージョンのパッケージソフトを利用することができる。
また、RHSCLからインストールしたパッケージソフトは、/usr/libではなく、/opt/rh配下にインストールされ、
環境変数PATHの切り替えによって、
利用するパッケージソフトのバージョンを切り替えることができる。
そのため、Python2.x(既存パッケージソフト)と、Python3.x(RHSCL)との共存なども可能。
Pythonバージョン切り替え
RHSCLのインストール
下記の手順で、SCLおよびPythonをインストールする。
$ yum install centos-release-scl-rh scl-utils
$ yum install rh-python36
Pythonのバージョン切り替え
方法1 : 現在のシェルのPythonバージョンを変更
# 環境変数の値を変更
$ source /opt/rh/rh-python36/enable
# 変更された環境変数を表示
$ env | egrep "^PATH=|^LD_LIBRARY_PATH=|^MANPATH=|^XDG_DATA_DIRS=|^PKG_CONFIG_PATH=" | sort
LD_LIBRARY_PATH=/opt/rh/rh-python36/root/usr/lib64:/usr/local/lib
MANPATH=/opt/rh/rh-python36/root/usr/share/man:
PATH=/opt/rh/rh-python36/root/usr/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
PKG_CONFIG_PATH=/opt/rh/rh-python36/root/usr/lib64/pkgconfig
XDG_DATA_DIRS=/opt/rh/rh-python36/root/usr/share:/usr/local/share:/usr/share
# Pythonのバージョンが変更されたことを確認
$ python -V
Python 3.6.1
$ which python
/opt/rh/rh-python36/root/usr/bin/python
新しいシェルを起動し、新しいシェルのPythonのバージョンを切り替える
# 新しいシェルを起動し、環境変数を変更
# scl enable 'コレクション名 '‘コマンド’の形式で実行
$ scl enable rh-python36 bash
# 変更された環境変数を表示
$ env | egrep "^PATH=|^LD_LIBRARY_PATH=|^MANPATH=|^XDG_DATA_DIRS=|^PKG_CONFIG_PATH=" | sort
LD_LIBRARY_PATH=/opt/rh/rh-python36/root/usr/lib64:/usr/local/lib
MANPATH=/opt/rh/rh-python36/root/usr/share/man:
PATH=/opt/rh/rh-python36/root/usr/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
PKG_CONFIG_PATH=/opt/rh/rh-python36/root/usr/lib64/pkgconfig
XDG_DATA_DIRS=/opt/rh/rh-python36/root/usr/share:/usr/local/share:/usr/share
# Pythonのバージョンが変更されたことを確認
$ python -V
Python 3.6.1
$ which python
/opt/rh/rh-python36/root/usr/bin/python
# 元のシェルに戻る
$ exit
# バージョンが元に戻っていることを確認
$ which python
/usr/bin/python
$ python -V
Python 2.7.5