やりたいこと
pythonをpyenv
+ pyenv-virtualenv
環境で利用している方向けです。
ディレクトリを移動した際に自動で.python-version
を読み込みactivate
したい。
理由は、
cd ~/foo
pyenv activate foo
cd ~
pyenv deactivate
とactivateとdeactivateをいちいち行うのがめんどうくさため。
direnv
を利用していればeval "$(direnv hook bash)"
を
~/.bashrc
などに下記の通り記載していればcd
するごとに
hookしてくれているみたいなので、direnv
を利用しなくてもできるはず。
少し調べてやってみれば簡単にできたので、備忘も兼ねて久々に投稿
(direnv
使えばいいのかもしれないけど、個人的になんかなじめなかった)
訂正:
eval "$(pyenv virtualenv-init -)"
と、~/.bash_profile
に記載されていれば自動で切り替わる...
上記、記載していたつもりであるが、記載位置が悪かったのか環境が切り替わらなかったことがあった...
設定
pyenv
とpyenv-virtualenv
環境の設定がされていることを前提としています。
その上で.bash_profile
などに下記を.bash_profile
に追記してください
cd(){
now_path=`pwd`
now_pyenv_filepath=$now_path/.python-version
if [ -e ${now_pyenv_filepath} ];then
now_pyenv=`cat ${now_pyenv_filepath}`
pyenv deactivate
fi
new_pyenv_filepath=$1/.python-version
if [ -e ${new_pyenv_filepath} ];then
local_env=`cat ${new_pyenv_filepath}`
pyenv activate ${local_env}
fi
builtin cd "$1"
}
上記を記載した上で、source .bash_profile
と読み込みなおせば
自動でdeactivate
とactivate
してくれます。
一番最初に現在の場所をpwd
で読み込み
そこに.python-version
があればdeactivate
するのが前半部分
さらに移動先のフォルダに.python-version
があれば
それを読み込みactivate
し、最後にビルトインされているcd
を読み込み
移動をしています。
bulitin hoge
でビルトインされているコマンド呼び出せるのしらんかった。
参考
shell hook
とかでぐぐった下記を参考にしました。
- https://unix.stackexchange.com/questions/170279/can-i-hook-into-the-cd-command