pyenvを用いたPython環境のセットアップ

Posted on March 21, 2022 by nobiruwa

tl;dr

$ git clone https://github.com/pyenv/pyenv.git $HOME/.pyenv
$ PYENV_HOME="$HOME/.pyenv"
$ PYENV_BIN="$PYENV_HOME/bin"
$ PATH="$PYENV_BIN:$PATH"
$ eval "$(pyenv init --path)"
$ eval "$(pyenv init -)"
$ mkdir -p $(pyenv root)/plugins
$ git clone https://github.com/pyenv/pyenv-virtualenv.git $(pyenv root)/plugins/pyenv-virtualenv
$ cat << EOF >> ~/.profile
PYENV_HOME="$HOME/.pyenv"
PYENV_BIN="$PYENV_HOME/bin"
if [ -d "$PYENV_BIN" ]; then
    export PATH="$PYENV_BIN:$PATH"
    # rehash after init, because my login shell is dash.
    eval "$(pyenv init --path)"
    eval "$(pyenv init --no-rehash -)"
    (pyenv rehash &) 2> /dev/null
fi
EOF

動機

jEnvを用いたJava環境のセットアップnodenvを用いたNode.js環境のセットアップと同じく、プログラミング言語の開発環境をrbenv/rbenvのフォークであるpyenv/pyenvによって構築したいと思いました。

セットアップ

pyenvのチェックアウト

pyenvリポジトリをチェックアウトします。

場所は公式に合わせて~/.pyenvとします。

さらに、pyenv-virtualenvリポジトリをpyenvのプラグインとしてチェックアウトします。

$ git clone https://github.com/pyenv/pyenv.git $HOME/.pyenv
# 一時的に`$HOME/.pyenv/bin`を`$PATH`に追加してpyenv-virtualenvをインストールする
$ PYENV_HOME="$HOME/.pyenv"
$ PYENV_BIN="$PYENV_HOME/bin"
$ PATH="$PYENV_BIN:$PATH"
$ eval "$(pyenv init --path)"
$ eval "$(pyenv init -)"
$ mkdir -p $(pyenv root)/plugins
$ git clone https://github.com/pyenv/pyenv-virtualenv.git $(pyenv root)/plugins/pyenv-virtualenv

~/.profileの記述

~/.profileにて、環境変数PATHを設定します。

PYENV_HOME="$HOME/.pyenv"
PYENV_BIN="$PYENV_HOME/bin"
if [ -d "$PYENV_BIN" ]; then
    export PATH="$PYENV_BIN:$PATH"
    # rehash after init, because my login shell is dash.
    eval "$(pyenv init --path)"
    eval "$(pyenv init --no-rehash -)"
    (pyenv rehash &) 2> /dev/null
fi

Pythonのインストール

pyenv installコマンドで~/.pyenv/versions配下に特定のバージョンのPythonをインストールします。

# インストール可能なバージョンを列挙する
$ pyenv install --list
# 3.10.3をインストールする場合
$ pyenv install 3.10.3

登録されたPythonは下記のコマンドで確認できます。

$ pyenv versions

なお、pip installコマンドは~/.pyenv/versions/<pyenv versionsで列挙されるバージョン文字列>ディレクトリ配下にインストールされます。

これだけではコマンドを使用可能になりませんので、pyenv rehashコマンドを実行してください。

すべてのバージョンのbinディレクトリを更新するので少々時間がかかります。

グローバルのPython環境

グローバルのPython環境を指定します。

$ pyenv global <pyenv versionsで列挙されるバージョン文字列>

ローカルのPython環境

ローカルのPython環境を設定するには、以下のコマンドを実行します。

$ cd <設定したいディレクトリ>
$ pyenv local <pyenv versionsで列挙されるバージョン文字列>

pyenv localを実行したディレクトリには.python-versionファイルが生成されます。

pyenv localを実行したディレクトリとその子孫ディレクトリで実行するpython/pip/virtualenvコマンド等は、.python-versionで指定されたPython環境のものが使用されます。