複数のバージョンのPythonを使いたいときはありませんか?ありますよね?そう,あるんですよ!そんな要望に応えてくれるのがpyenvです.ということで,pyenvの導入方法のメモです.巷には環境分離ツールがあふれかえっていますが個人的にはpyenvで複数バージョンを管理してvenvでパッケージ環境を切りわけるような使い方がもっともシンプルであらゆるニーズに対応できるのではないかと思っています.
複数のバージョンのpythonを使いたければyes,それ以外はnoかと.
pyenvはバージョン間での動作検証したりとか,わりとがっつりコード書く人には向いてますがライトユーザには向いてない印象です.Pythonが動けばバージョンとか気にしないよ!って人であればpyenvは不要.内部でPATHをごにょごにょしているのでライトユーザ層にとってはPATHまわりがはまりポイントになりそうで,自己解決困難となることが容易に想像できます.使わない方が吉でしょう.
pyenvはgithubで開発されています.ここに書いてある通りにやっていきます.以下、2022/3/13 時点でのLinuxへの導入方法です.変更される可能性があるのでご注意ください.いや,まじでこんなの読むよりオフィシャル読んだほうがいいです.
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 install -l
でインストール可能なリストが表示されるので,pyenv install (version)
でインストールすればOKです.
pyenv install 3.10.2
ちなみにインストール候補はtab補完が効きます.
WARNING: The Python bz2 extension was not compiled. Missing the bzip2 lib?
のようなWARNINGが出る場合,メッセージの内容にあわせてこのあたりのパッケージが必要かもしれません.
sudo apt-get install libbz2-dev libreadline-dev libsqlite3-dev
とあるプロジェクトで特定のバージョンのPythonを使いたい場合,そのフォルダに移動してpyenvコマンドを使用します.例えば,プロジェクト hoge で 3.10.2 を使いたい場合
pyenv local 3.10.2
とすればOKです.
そのユーザが何も考えずにPythonを使用した時に動作するバージョンを指定します.
pyenv global 3.7.12
pyenv versions
system
* 3.10.2 (set by /hoge/fuga/piyo/.python-version)
3.7.12
新しいPythonがリリースされるとpyenvが更新されます.ちゃんと確認したことはないです更新までのタイムラグはかなり短そうです.
cd ~/.pyenv
git pull