pyenv + venvでPython3環境を構築する - $shibayu36->blog; の記事で、特定のPythonプロジェクト用のvirtualenv環境を導入することが出来ました。しかし、このプロジェクトに入るたびにsource venv/bin/activate
し、逆に抜ける時にdeactivate
するのは
- 面倒
- どう考えても実行を忘れる
という問題があります。
そこでzsh-autoenvというzshプラグインを使って、自動でactivateとdeactivateを出来るようにしたのでメモしておきます。
zplugを導入する
今回の本題から外れますが、zshのプラグインの管理ツールをこれまで入れてこなかったので、この機会にzplugを導入しました。
$ curl -sL --proto-redir -all,https https://zplug.sh/installer | zsh
でインストールし、下記設定をするだけの簡単導入でした。
# ---------------- setting for zplug -------------------------- source ~/.zplug/init.zsh # zsh-autoenvのインストール zplug "Tarrasch/zsh-autoenv" # Install plugins if there are plugins that have not been installed if ! zplug check --verbose; then printf "Install? [y/N]: " if read -q; then echo; zplug install fi fi # プラグインを読み込み、コマンドにパスを通す zplug load --verbose
zsh-autoenvを使って自動でactivateとdeactivateを出来るように
zsh-autoenv とは、
- ディレクトリに
.autoenv.zsh
を置いておくと、そのディレクトリ以下に入った時に自動でそのファイルを実行してくれる - ディレクトリに
.autoenv_leave.zsh
を置いておくと、そのディレクトリから抜ける時に自動でそのファイルを実行してくれる
というものです。これを使えば
が実現できますね。
インストール
先程zplugを導入したので、.zshrcに以下を追加するだけです。
zplug "Tarrasch/zsh-autoenv"
venv環境を作る
以下のコマンドでvenv環境を作ります。
$ mkdir python-playground $ cd python-playground $ python -m venv venv
zsh-autoenvの設定を行う
python-playgroundディレクトリにて以下のコマンドを実行し、.autoenv.zsh
と.autoenv_leave.zsh
を用意します。
$ echo 'source venv/bin/activate' > .autoenv.zsh $ echo 'deactivate' > .autoenv_leave.zsh
確認する
ではこのディレクトリに入ってみます。
$ cd python-playground Attempting to load unauthorized env file! -rw-r--r-- 1 shibayu36 staff 25 Apr 1 21:20 /Users/shibayu36/development/src/github.com/shibayu36/python-playground/.autoenv.zsh ********************************************** source venv/bin/activate ********************************************** Would you like to authorize it? (type 'yes') yes $ which python /Users/shibayu36/development/src/github.com/shibayu36/python-playground/venv/bin/python
初回はファイルを実行してよいか聞かれるのでyesと答えます。which python
すると、ディレクトリ配下のpythonを示すようになっているので、cdでディレクトリに入っただけでvirtualenvのactivateがされるようになりました。
逆にディレクトリを出てみます。
$ cd .. Attempting to load unauthorized env file! -rw-r--r-- 1 shibayu36 staff 11 Apr 1 21:20 /Users/shibayu36/development/src/github.com/shibayu36/python-playground/.autoenv_leave.zsh ********************************************** deactivate ********************************************** Would you like to authorize it? (type 'yes') yes $ which python /Users/shibayu36/.anyenv/envs/pyenv/shims/python
こちらも初回は確認が出るのでyesと答えます。そうするとディレクトリを出るだけでpyenvのpythonを指し示すようになり、自動でdeactivateされるようになりました。