pyenvで複数バージョンをサクッと切り替える
複数のバージョンのPythonを使いたいときはありませんか?ありますよね?そう,あるんですよ!そんな要望に応えてくれるのがpyenvです.ということで,pyenvの導入方法のメモです.巷には環境分離ツールがあふれかえっていますが個人的にはpyenvで複数バージョンを管理してvenvでパッケージ環境を切りわけるような使い方がもっともシンプルであらゆるニーズに対応できるのではないかと思っています.
わたしはpyenvが必要ですか?
必要性を感じないのなら導入しなくても良いかと.ユースケースでざっくりわけるとこんな感じ.
Python特定バージョンを使いたい
Pyenvをおすすめします.
Pythonの複数のバージョンを切り替えて使いたい
Pyenvをおすすめします.
Pythonのバージョンはなんでもいいけどシステム環境を汚したくない
venvで良いかと思います.
Pythonだけじゃなくて環境まるごと特定のものが必要
Docker をおすすめします.
Pythonが動けばバージョンは気にしない
PyenvもDockerもいりません.
pyenv の導入
pyenvはgithubで開発されています.ここに書いてある通りにやっていきます.やり方は変更される可能性があるのでご注意ください.いや,まじでこんなの読むよりオフィシャル読んだほうがいいです.
git clone https://github.com/pyenv/pyenv.git ~/.pyenv
cd ~/.pyenv && src/configure && make -C src
以下,~/.profile
と ~/.bashrc
があるディストリビューション(たぶんDebian系はこれ)の説明になります.
~/.profile
を編集します.最初の2行と最後の1行を追加.
export PYENV_ROOT="$HOME/.pyenv"
export PATH="$PYENV_ROOT/bin:$PATH"
# if running bash
if [ -n "$BASH_VERSION" ]; then
# include .bashrc if it exists
if [ -f "$HOME/.bashrc" ]; then
. "$HOME/.bashrc"
fi
fi
# set PATH so it includes user's private bin if it exists
if [ -d "$HOME/bin" ] ; then
PATH="$HOME/bin:$PATH"
fi
# set PATH so it includes user's private bin if it exists
if [ -d "$HOME/.local/bin" ] ; then
PATH="$HOME/.local/bin:$PATH"
fi
eval "$(pyenv init --path)"
次に ~/.bashrc
を編集します.最後の行に追加.
eval "$(pyenv init -)"
~/.profile
を読み込みます.
source ~/.profile
pyenv --version
pyenv 2.2.4-1-10-g0d949796
OK.
pyenv の使い方
特定のバージョンをインストール
あらかじめ必要なパッケージをインストールしておく必要があります. (このパッケージリストはTrouble Shooting/FAQのページにあるので恥ずかしながらはじめ気づかずにワーニングメッセージを読みながら推測でインストールしていました)
Debian/Ubuntu系であれば以下です.
sudo apt update; sudo apt install build-essential libssl-dev zlib1g-dev \
libbz2-dev libreadline-dev libsqlite3-dev curl \
libncursesw5-dev xz-utils tk-dev libxml2-dev libxmlsec1-dev libffi-dev liblzma-dev
pyenv install -l
でインストール可能なリストが表示されるので,pyenv install (version)
でインストールすればOKです.
pyenv install 3.10.2
ちなみにインストール候補はtab補完が効きます.
特定のバージョンを指定フォルダ以下で使用する
とあるプロジェクトで特定のバージョンのPythonを使いたい場合,そのフォルダに移動してpyenvコマンドを使用します.例えば,プロジェクト hoge で 3.10.2 を使いたい場合
pyenv local 3.10.2
とすればOKです.
ユーザがデフォルトで使用するPythonのバージョンを指定する
そのユーザが何も考えずにPythonを使用した時に動作するバージョンを指定します.
pyenv global 3.7.12
今有効なバージョンを確認&インストールされているバージョンを確認
pyenv versions
system
* 3.10.2 (set by /hoge/fuga/piyo/.python-version)
3.7.12
新しいPythonがリリースされたので試してみたい
新しいPythonがリリースされるとpyenvが更新されます.ちゃんと確認したことはないです更新までのタイムラグはかなり短そうです.
cd ~/.pyenv
git pull
まとめ
- PyenvはPythonのバージョンを切り替えて使うニーズがある人におすすめ
- 導入方法はオフィシャルを読め