pipenv は初期設定では ~/.local/share/virtualenvs/
の下に仮想環境を作ります。
$ pipenv install
...
Virtualenv location: /Users/a-hoge/.venvs/spam-O71st27X
...
しかし、実際に使う上では、
-
~/.local/share/virtualenvs/
ではなく~/.venvs
の下に作りたい - プロジェクトの直下に作りたい
- すでに仮想環境を作ってあるので、そこにインストールしたい
などと、仮想環境の場所を変えたいことがよくあります。
$WORKON_HOME
: 仮想環境の親ディレクトリを変える
$WORKON_HOME
を定義すると、仮想環境はその下に作られます。
$ export WORKON_HOME=~/.venvs
$ pipenv install
...
Virtualenv location: /Users/a-hoge/.venvs/spam-O71st27X
...
$PIPENV_VENV_IN_PROJECT
: プロジェクトの直下に仮想環境を作る
$PIPENV_VENV_IN_PROJECT
を定義すると、プロジェクトの直下に .venv/
が作られます。
$ export PIPENV_VENV_IN_PROJECT=1
$ pipenv install
...
Virtualenv location: /Users/a-hoge/spam/.venv
...
なお「プロジェクトの直下」は、pipenv install を実行したディレクトリではなく、Pipfileが置かれたディレクトリのようです。
$VIRTUAL_ENV
: すでにある仮想環境を使用する
$VIRTUAL_ENV
が定義されていると pipenv はその場所にある仮想環境を使おうとします。 $VIRTUAL_ENV
は仮想環境をactivate
すると、定義されます。
$ python -m venv ~/foo
$ source ~/foo/bin/activate # VIRTUAL_ENVなどの定義(コマンドはBashの場合)
$ echo $VIRTUAL_ENV
/Users/a-hoge/foo/
$ pipenv install
$ pipenv --venv
Courtesy Notice: Pipenv found itself running within a virtual environment, so it will automatically use that environment, instead of creating its own for any project. You can set PIPENV_IGNORE_VIRTUALENVS=1 to force pipenv to ignore that environment and create its own instead. You can set PIPENV_VERBOSITY=-1 to suppress this warning.
/Users/a-hoge/foo/
警告は出ますが、指定した仮想環境が使われます。
なお、仮想環境をまだ作っていないパスを指定すると、単にエラーになります。
$ export VIRTUAL_ENV=~/not-created
$ pipenv install
...
RuntimeError: location not created nor specified
...
この機能は、すでに venv で仮想環境を作ってある場合に後付けで pipenv を導入するのが主な利用目的だと思いますが、
「$WORKON_HOME
も$PIPENV_VENV_IN_PROJECT
も要らん! 俺はインストール先を自由に決めたいんだ!!」というときも役立ちそうです。
なお、上述の通り $VIRTUAL_ENV
が定義されていると警告が出ます。これは誤って別の仮想環境にインストールしてしまうのを防ぐためのものでしょう。既存の仮想環境を流用する必要がない場合は、警告文にもある通り PIPENV_IGNORE_VIRTUALENVS=1
を定義してこの振る舞いを無効化できます。