Python

【Python】【Mac】pyenvでPythonのバージョン管理をする

複数のプロジェクトで異なるPythonのバージョンを使用したい時など、状況に応じてPythonのバージョンを切り替えるためにpyenvを使う。

Macではpyenvがそのまま使える。Windowsの場合、pyenv-winがある。

なお、インストール方法は異なるが、インストール後の使い方はMacもWindowsもほぼ同じ。

pyenvのインストール

Homebrewからインストールする。

$ brew install pyenv

Homebrewがない場合、以下のコマンドでインストールする。

$ /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"

Homebrew公式ページ

pyenvにPythonのパスを通す

github pyenv Set up your shell environment for Pyenv

上記のページを参考に、自分の使用しているシェル、環境に合わせてパス追加を行う。

# .pyenvのパスを設定する。
$ echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.bach_profile
# pythonコマンドのパスを設定する
$ echo 'export PATH="$PYENV_ROOT/shims:$PATH"' >> ~/.bach_profile
# pyenvの初期設定を行う
$ echo 'eval "$(pyenv init --path)"' >> ~/.bash_profile
$ echo 'if [ -n "$PS1" -a -n "$BASH_VERSION" ]; then source ~/.bashrc;fi'>>~/.bash_profile

私の環境の場合、.pyenv/binではなく、.pyenv/shimsだったのでgithubの記載情報から変更して設定した。

パス設定後はターミナルを再起動する。

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

pyenvでインストール可能なpythonのバージョンを確認する。

マイナーバージョンまで細かく分かれているため、grepなどでバージョンを指定したほうがいい

$ pyenv install --list | grep 3.9
【出力例】
  3.9.0
  3.9-dev
  3.9.1
  3.9.2
  3.9.4
  3.9.5
  3.9.6
  3.9.7
  3.9.8
  3.9.9
  3.9.10
  3.9.11
  miniconda-3.9.1
  miniconda3-3.9.1
  miniconda3-3.9-4.9.2
  miniconda3-3.9-4.10.3
  miniconda3-3.9-4.11.0
  pypy3.9-7.3.8-src
  pypy3.9-7.3.8

バージョンを指定してインストールする

インストール可能なバージョンを確認したら、バージョンを指定してインストールする。

$ pyenv install 3.9.11
【出力例】
・・・
Installed Python-3.9.11 to /Users/kazumac/.pyenv/versions/3.9.11

インストールされているバージョンの確認

$ pyenv versions
【出力例】
* system (set by /Users/kazumac/.pyenv/version)
  3.10.3
  3.9.11

pyenv経由でインストールされたPythonのバージョン一覧が表示される。

「*」がついているバージョンはglobal, localの両方で設定されているバージョンとなる。

Pythonのバージョンを切り替える

$ pyenv global 3.9.11
$ pyenv versions
  system
  3.10.3
* 3.9.11 (set by /Users/kazumac/.pyenv/version)

バージョンが切り替わる。

Pythonのバージョン確認

$ python -V
Python 3.9.11

pythonコマンドから実行されるPythonのバージョンが指定したバージョンになっていることが確認できる。

venvとpythonのバージョン

venvでpython仮想環境を作る場合、venvを実行した時に使用されているバージョンのpythonで仮想環境が作成される。

venvで仮想環境作成後に、pyenvでpythonのバージョンを切り替えても、venvのpythonバージョンは切り替わらないので注意。

切り替えた後のpythonバージョンで仮想環境を作り直す必要がある。