autoenvを使ってvirtualenvの環境にディレクトリ移動で自動ログインする


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

環境は

  • MacOS Sierra 10.12.3
  • Python3.6.0
  • virtualenv 15.1.0


virtualenvを使っているとpythonの仮想環境を簡易的に作れるので

ライブラリの追加などで大元の環境を汚さなくて済むし

世界的にはでファクトリスタンダード(らしい)が

参考

Pythonの仮想環境構築 2017.01版

毎回terminal立ち上げるのにworkonしてるのも面倒なのでpythonの開発ディレクトリにcdするだけで起動する方法として

autoenvというのを試してみた


autoenvというのがある

Autoenv: Directory-based Environments

https://github.com/kennethreitz/autoenv#what-is-it

ディレクトリごとに.envで環境を構築できるスグレモノっぽい

早速いれてみる、githubにそれぞれ環境によって入れ方があってMacの場合は下記で簡単に入った

1
2
3
$ brew install autoenv
$ echo "source $(brew --prefix autoenv)/activate.sh" >> ~/.bash_profile
$ source ~/.bash_profile


試してみる

最初だけなんか警告がでる(この.envははじめてだけど大丈夫かい?みたいな。.envを変更するたびに聞かれる)

が大丈夫なので y/N聞かれるからyでよい

で、試しに下記 .env を作ってみてみる

homeディレクトリにprojectというディレクトリを作成してその中に”echo ‘whoa’”と記載した.envを作成

すると、projectディレクトリにcdするとコンソール上に whoa と出て来る

1
2
3
4
5
$ cd ~
$ mkdir project
$ echo "echo 'whoa'" > project/.env
$ cd project
whoa


nestしたディレクトリに移動しても実行される

1
2
$ cd project/hoge/fuga
whoa

ちなみにnestされた場所から戻った場合でも起動するみたい

1
2
3
4
$ pwd
/path/to/project/hoge
$ ../
whoa


ただし毎回実行されてしまってそれはそれでめんどい

というか.envを置いたディレクトリ以降においておいたらそこから移動するたびに何度でも実行されてしまうっぽい

それはそれで毎回実行されすぎるのも困り者だな、なんか1回で済んでくれたらいいのだがということで

ぐぐってたら下記2つがヒット

Using autoenv with python virtualenvs | Rob Smith - Senior DevOps Engineer - Seattle, WA

python - autoenv executes even in subfolder - Stack Overflow


とりあえず、virtualenvの仮想環境に入ってる時は$VIRTUAL_ENVというのが発動していて

それが発動しているか否かでworkonするかしないか判断するスクリプトになってるみたい

自分は、仮想環境の名前がcvなので下記.envファイルを作ってprojectディレクトリに保存した

.env
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
venv="cv"
currentvenv=""
if [[ $VIRTUAL_ENV != "" ]]
then
# Strip out the path and just leave the env name
currentvenv="${VIRTUAL_ENV##*/}"
fi
if [[ "$currentvenv" != "$venv" ]]
then
echo "Switching to environment: $venv"
workon $venv
#else
# echo "Already on environment $venv"
fi

これでterminalを起動してprojectのpathまで移動した時に自動で発動するようになった!


pythonのバージョンを基本1種類しか使わないなら下記でも大丈夫

というか自分の場合は基本的にpython3しか使わないので、いつでもcv発動していてもいいのでは・・・

ということで.bash_profileにworkonコマンドを記載しておけばよい(例えばcvという環境だった場合下記)

.bash_profile
1
workon cv

これが良いかどうかはわからないのでまぁやっぱりautoenvを使うほうがいいのではとは思う


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