direnvを使って、source bin/activateを自動化する

f:id:yoshitaku_jp:20180728144033p:plain

目次

  1. はじめに
  2. tl;dr
  3. 手順
    1. インストール
    2. bashへhookを設定する
    3. .envrcの作成
    4. エラーが出たら
  4. まとめ

はじめに

Pythonの使って開発するときはvenvを使うことが多いと思います。venvを使って仮想的に開発環境を分けることによって、相互の環境で利用するライブラリをごちゃまぜにしないためです。venvが便利な半面、仮想環境を使うタイミングであったり、切り替えるタイミングであったりで、source bin/activateするのがめんどくさくなってきてしまいました。source bin/activateを自動化出来ないものか考えているうちに、便利なツールに巡り会えたのでブログに書いておきます。

以前巡り合った便利ツールはこちら

yoshitaku-jp.hatenablog.com

tl;dr

  • Go製のdirenvを使うよ
  • これでsource bin/activateを自動化できるよ

手順

インストール

MacならHomebrewを使ってbrew install direnvコマンドでインストールできます。

bashへhookを設定する

~/.bashrcへ、direnvを使うよという指示を与えておきます。 2行目以降は、仮想環境の名前を()付きで表示するために必要な設定です。

eval "$(direnv hook bash)"
show_virtual_env() {
  if [ -n "$VIRTUAL_ENV" ]; then
    echo "($(basename $VIRTUAL_ENV))"
  fi
}

PS1='$(show_virtual_env)'$PS1

設定を反映させる

source ~/.bashrc

.envrcの作成

.envrcを作成する前に、エディターを設定しておきます
export EDITOR=vim

source bin/activateしている、ディレクトリに移動して

direnv edit .

を実行、vimが起動します。

source bin/activate

を記述して完成。

cdコマンドで.envrcファイルのあるディレクトリに移動すると、 無事、自動的に仮想環境に入れる!

エラーが出たら

direnv: error .envrc is blocked. Rundirenv allowto approve its content.

はエラーにある通り、direnv allowを実行して、direnvの実行を許可しましょう。

まとめ

  • source bin/activateを自動化することが出来た
  • 地味にめんどくさかったから嬉しい