このエントリーをはてなブックマークに追加

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を使ってもうまくいかない。はてさて。

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