direnvでvenv環境を自動でactivate

(おことわり) この記事は途中で挫折していますので、できた方の報告をお待ちしております。

python3をお使いのみなさまは、venvを使って各プロジェクトで venv とか env とかのディレクトリを作成しているものと思われます。

しかし、プロジェクトがたくさんある場合、activateし忘れてしまう、あるいは別のプロジェクト用ののvenvを実行してしまうということは多いと思います。

direnv

direnv というツールがあります。これはある所定のディレクトリに入った時に、 .envrc というファイルがあれば、その環境変数を読み込むものです。 この .envrc

. venv/bin/activate

と書いておくだけでOKです。 direnv allow で使えるようにしておけば、あとはこのディレクトリやその下のディレクトリ階層に入った時に勝手にactivateされます。 また、これ以外のディレクトリに移動した場合は、勝手にunloadしてくれます。

問題点

普通にactivateすると、プロンプトに (venv) などが付き、deactivateすると消える、というようになります。しかし、このdirenvの仕組みを使うと、direnvの中での動作になり、promptが変更できません。

正確に言うと、変更できるのですが、現在の $PROMPT を読み込めず、また、ディレクトリを出た時に復帰してくれない(出た時のhookがdirenvにない)のです。うーむ。

layout_virtualenv() などを定義してlayoutを使ってもうまくいかない。はてさて。

ということで、実際にはまだこの仕組を使ってないのでした。

Comments

comments powered by Disqus