Pythonをバージョンによって使い分ける

2019.10.2 (水)

python2とpythin3の過渡期と言われて、まだまだ過渡期が続いていったい何年続くんや?ということで、結局2も3も使わないといけないわけなので、結局エブリデー過渡期のPythonです。
特に私の場合はAnsibleをどっちのバージョンでやるべきかという検討でかなり迷ったので、結局Pythonはバージョンを複数使わないとダメだなという結論でした。その他のアプリでも言語のバージョンを複数使いこなさないといけない場合があると思います。

Python 3サポート
AnsibleはPythonバージョン3.5以降のみをサポートします。なのでCentOS7などではデフォルトでPython 2.7.5がインストールされているので、Python3をインストールする必要があります。

Ansibleの環境を設定する – Python3が今後の主流になりますが、Python2のアプリもあるという場合には両方使えるようにしておく必要があります。Ansibeを使う場合はPython3を使うようにします。
pyenvはバージョンを切り替えて使うことができるツールです。pyenvでは3系の中でも「3.6.1」➔「3.6.2」というように細かいバージョンの切替もできます。また、ディレクトリごとにpythonのバージョンを切り替えることもできます。

pyenv install

必要なライブラリー関連をインストールします。ここではrootで使えるようにしておきます。各ユーザーで使える

ようにするには同じ手順でインストールする必要があります。

# yum -y install gcc zlib-devel bzip2 bzip2-devel readline readline-devel sqlite sqlite-devel openssl openssl-devel libffi-devel

https://github.com/pyenv/pyenvからgitでソースを落とします。

# cd ~
# git clone https://github.com/pyenv/pyenv.git ~/.pyenv

.pyenvが作成されました。

続いて.pyenvのパスを追加します。

# echo '# .pyenv' >> ~/.bash_profile
# echo 'export PATH="$HOME/.pyenv/bin:$PATH"' >> ~/.bash_profile
# echo 'eval "$(pyenv init -)"' >> ~/.bash_profile
# source ~/.bash_profile

(何故か.bash_profileが動かないときがあるので、.bashrcにも入れておく。)
# echo '# .pyenv' >> ~/.bashrc
# echo 'export PATH="$HOME/.pyenv/bin:$PATH"' >> ~/.bashrc
# echo 'eval "$(pyenv init -)"' >> ~/.bashrc
# source ~/.bashrc

これで使えるようになっているはずです。確認します。

# pyenv --version
pyenv 1.2.13-12-g8a56fe64

Pythonのバージョンの切り替え方は後ほど説明します。

Python3 install

2019-09-20段階での最新は、Python 3.7.4です。Python 3.7.4をインストールします。最新版を確認します。

# pyenv install --list
...
3.7.4
...

インストールします。思ったより時間かかります。

pyenv install 3.7.4

これだけでインストールは終わりです。

またBUILD FAILED (CentOS Linux 7 using python-build 1.2.13-12-g8a56fe64)でインストールが失敗する場合があります。依存ライブラリー関連を確認してみます。libffi-develが入ってないとか。

現行のPythonから新しいバージョンに切り替えます。

まずは現行のバージョン確認。

# python --version
Python 2.7.5

切り替え

$ pyenv global 3.7.4

確認

# python --version
Python 3.7.4

これでrootユーザーは新しいpython3を使えるようになりました。

各/home以下のユーザーも基本的には同じインストール方法で設定が可能ですが、python --versionpyenv versionsで示している値が違っている場合があります。私の場合はpython --versionは古いままでpyenv versionsでは新しい方を指していました。

https://qiita.com/koooooo/items/b21d87ffe2b56d0c589b

pythonのパスを確認します。

$ which python
~/.pyenv/shims/python

バージョンを切り替える方法

登録されているバージョンを確認します。たくさんのバージョンが出てきますが、以下ぐらいを使うのよさそう。

pyenv install --list
....
2.7.5
....
3.7.4
....

グローバルで切り替える場合は、

$ pyenv global 2.7.5
or
$ pyenv global 3.7.4

ローカル(ユーザー単位)で切り替える場合には、

$ pyenv local 2.7.5
or
$ pyenv local 3.7.4

となります。

python --version

で確認します。

デフォルトのPythonを3にしてサブのPythonを2にする

今のところ、やり方がわからないです。

デフォルトのPythonを2にしてサブのPythonを3にする

デフォルトのバージョンを確認します。

python --version
Python 2.7.5

Python2の場合は、必要に応じて以下の方法で3にスイッチすることができます。

$ /bin/bash -l