LoginSignup
79
80

More than 5 years have passed since last update.

pipenv で任意の場所の仮想環境を使う

Posted at

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を定義してこの振る舞いを無効化できます。

79
80
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
79
80