PYENV_ROOTは必ずexportする!

/

このページを参考にしながらpyenv/virtualenv環境をセットアップした。

 git clone https://github.com/pyenv/pyenv.git ~/.local_pyenv
 git clone https://github.com/pyenv/pyenv-virtualenv.git ~/.local_pyenv/plugins/pyenv-virtualenv

都合により~/.pyenvではなく~/.local_pyenvにchange install locationしている。.profileには当初以下のように書いていた。.profileはUbuntu20.04の場合。他適当なものに読み替えられるだろう。

if [ -d "$HOME/.local_pyenv" ]; then
    PYENV_ROOT="$HOME/.local_pyenv"
    PATH="$PYENV_ROOT/bin:$PATH"
    eval "$(pyenv init --path)"
    eval "$(pyenv init -)"
    if [ -d "$PYENV_ROOT/plugins/python-virtualenv" ]; then
        eval "$(pyenv virtualenv-init -)"
    fi
fi

すると次のようにdefault locationに一部のファイルが作成されてしまった。

ls -a ~/
...
.pyenv
.local_pyenv
...

原因はページタイトルの通りである。PYENV_ROOTをエクスポートすればよい。

if [ -d "$HOME/.local_pyenv" ]; then
    export PYENV_ROOT="$HOME/.local_pyenv"
    export PATH="$PYENV_ROOT/bin:$PATH"
    eval "$(pyenv init --path)"
    eval "$(pyenv init -)"
    if [ -d "$PYENV_ROOT/plugins/python-virtualenv" ]; then
        eval "$(pyenv virtualenv-init -)"
    fi
fi

わかったこととして、PYENV_ROOTが読みだせないときにpyenvは自分が置かれている場所をPYENV_ROOTとみなすのではなく~/.pyenvだとみなすようだ。これは中身を見ていっているわけでは無いので注意。自分の置かれている場所をPYENV_ROOTとする、のを未定義時の挙動とするのではだめなんだろうか??と思った次第。

以上!