Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
61
Help us understand the problem. What is going on with this article?
@tonluqclml

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

More than 1 year has passed since last update.

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

61
Help us understand the problem. What is going on with this article?
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
tonluqclml
エムスリーでソフトウェアエンジニアしています。仕事ではRubyもScalaもPythonもBashもなんでもやる雑食系。 Twitter:https://twitter.com/doloopwhile 昔の個人ブログ:http://doloopwhile.hatenablog.com/ 勤務先ブログ: https://www.m3tech.blog/
m3dev
インターネット、最新IT技術を活用し日本・世界の医療を改善することを目指します

Comments

No comments
Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account Login
61
Help us understand the problem. What is going on with this article?