Pythonの複数バージョンを同時に使い分ける

2023/02/11に公開

Pythonの複数バージョンを同時に使い分ける

背景

ChatGPTのAPIに接続するために環境を自宅のCentOSにインストールしようとしたところ、既にインストールしてあるPythonのバージョン3.6.8ではpipでモジュールをインストールする際に特定のモジュールとの互換性がないエラーでコケてしまう。なぜかPython 3.10を決め打ちで要求されるので仕方なくWindowsにPythonをインストールして使ってみたがやっぱり不便で仕方がないのでCentOSのPythonのバージョンを複数同時に使い分けられたらいいのでは?と思い調べるとpyenvなるツールがあるらしい。

pyenv のインストール

curl -L https://raw.githubusercontent.com/yyuu/pyenv-installer/master/bin/pyenv-installer | bash

無事インストールできたら、~/.bash_profileに以下の環境変数を追加します。
# vi ~/.bash_profile

export PYENV_ROOT="$HOME/.pyenv"
command -v pyenv >/dev/null || export PATH="$PYENV_ROOT/bin:$PATH"
eval "$(pyenv init -)"
eval "$(pyenv virtualenv-init -)"

~/.bash_profileを再度読み込みます。
source ~/.bash_profile

確認します。以下のコマンドが認識されればOKです。
# pyenv

各バージョンのPyhtonをインストール

# pyenv install <python_version>

念のため元々インストールしているPython 3.6.8をインストールしておきます。
コマンド
# pyenv install 3.6.8

ChatGPT用にPython 3.10.10をインストールします。
# pyenv install 3.10.10
※多少のワーニングは出ますが、無事インストールされました。

インストールされたバージョンを確認

# pyenv versions
コマンド結果

* system (set by /root/.pyenv/version)  <= 現在はシステム標準のものが使われています。
  3.6.8
  3.10.10

バージョンの切り替え

以下の範囲で切り替えることができます。

コマンド 切り替えが適用される範囲
shell 現在のシェル内でのみ有効なバージョン指定
local 現在のディレクトリとそれ以下のディレクトリで有効なバージョン指定
global システム全体で有効なバージョン指定

※優先順位ですが、以下の順で適用されます。

shell > local > global

shellが一番優先され、globalが最も優先度が低い設定です。

切り替え

pyenv localでバージョン変更

今回ChatGPT(OpenAIのAPI)用に専用ディレクトリを用意したのでそこにバージョン3.10.10を適用しようと思います。

pyenv localを使うと、現在のディレクトリとそれ以下のディレクトリで使うバージョンを指定できます。
# cd <folder path>
# pyenv local 3.10.10
# python --version

Python 3.10.10

無事切り替えられました。

Discussion