pythonのバージョン切り替えをしたい。
調べてみたが、Pythonのバージョン切り替えやプロジェクトごとのバージョン管理はなかなか分かりづらい。 pythonそのもののバージョンを切り替えるにはpyenvを使うのが良さそう。
実際のところ、pyenvをsystem wideにインストールする必然はない。 自分の場合は、ユーザーのディレクトリに置きたくなかっただけの理由だ。
参考
- Qiita: pyenv、pyenv-virtualenv、venv、Anaconda、Pipenv。私はPipenvを使う。
- pyenv、virtualenv、pip、anacondaの違いを説明します (寝坊した)
目次
pyenvのインストール
基本的にRuby版であるrbenvのインストールと同様の手順でいけるはず。(DebianにRuby 3をインストール)
最初にディレクトリを作成してgroupとpermissionを設定すれば、あとの作業はsudoを使わなくてもOK。
sudo mkdir -p /usr/local/share/pyenv sudo chgrp -R staff pyenv sudo chmod -R g+rwxXs pyenv git clone https://github.com/pyenv/pyenv.git /usr/local/share/pyenv git clone https://github.com/pyenv/pyenv-virtualenv.git /usr/local/share/pyenv/plugins/pyenv-virtualenv環境変数の設定は以下の通り:
export PYENV_ROOT="/usr/local/share/pyenv" export PATH="${PYENV_ROOT}/bin:${PATH}" export PATH="${PYENV_ROOT}/shims:${PATH}" eval "$(pyenv init - )"
/usr/local/share/pyenv/shimsのPATHを追加しているのは、これが無いとpyenvのpythonが認識されないため苦肉の策。 この対処が正しいのかは分かっていない。
環境変数を反映させる。自分はzshを使っているので.zshenv
に入れている。各自の環境に合わせてね。source .zshenv
pythonのインストール
pythonのインストールはpython環境をbuildすることと同じ意味であることに注意。 だから、構築するためのツール・ライブラリなどがないと失敗する。
というわけでdebianではbuild-dep
で構築環境を一式インストールしておく:
sudo apt build-dep python3.11
(python3.11
の部分は自分のシステムのpythonのパッケージ名に合わせる。)
ここまで来るとようやくpyenvでpythonをインストールできる。
pyenvからインストールできるpythonのバージョンを知るには
pyenv install -l
とする。
しかし、たくさんリストが出てきて困る。python本体だけを抽出するには
pyenv install -l
pyenv install --list | grep "^ *3\.*"のようにする。
pyenv install 3.8.11 pyenv local 3.8.11
確認すると下のようになる:
~% pyenv versions system * 3.8.11 (set by /home/xxxx/.python-version)
pyenvのupdate
pyenv自身にはupdateの機能はないらしい。 update は git pullすることになる。cd /usr/local/share/pyenv git pull