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のバージョンを切り替えて使うニーズがある人におすすめ
  • 導入方法はオフィシャルを読め

Written by YYatsuo in Blog on Sat 13 March 2021. Tags: Linux, Python, Pyenv,