Help us understand the problem. What is going on with this article?

「pipenv + direnv」で脱「pyenv virtualenv + pyenv local」

More than 1 year has passed since last update.

はじめに

最近話題の pipenv はいろいろと便利なところも多いのですが、単体だと pyenv local 相当のコマンドがありません。
毎回 pipenv run を頭につけるのは面倒だし、pipenv shell だと別の shell が立ち上がるからこれも面倒。

やっぱり、pyenv local みたいに cd したら勝手に環境が切り替わって欲しい。
そんな方は direnv を併用しましょう。

使用例

$ which python
/usr/bin/python

$ mkdir my_project

$ cd my_project

$ pipenv install --python=3.7 numpy matplotlib  # ≒ pyenv virtualenv 3.7.0 my_project
.....

$ echo 'layout_pipenv' > .envrc && direnv allow  # ≒ pyenv local my_project
direnv: loading .envrc
direnv: export +PIPENV_ACTIVE +VIRTUAL_ENV ~PATH

$ which python
/home/kzm4269/.local/share/virtualenvs/my_project-9qDNSaIH/bin/python

必要なもの

Python

Python 2.7 もしくは Python 3.4 以降ならなんでもいいです。

pipenv

普通に pip でインストールできます。aptbrew でもインストールできるようなのでお好みで。

pip install pipenv

詳しくは以下のURLを参照してください。

direnv

インストール方法は以下のURLを参照してください。
コンパイル済みのバイナリを使う方法とソースからコンパイルする方法があります。

補足1. pyenv が不要になるわけではありません

pipenv はあくまでも実行環境の構築が主な機能で、Python本体のインストールは管轄外です。
pyenv をインストールしておくと、 pipenv が裏で連携して Python 本体のインストールもしてくれるようになります。

補足2. 複数のディレクトリで virtualenv を共有するのは面倒になります

完全に別の場所にあるディレクトリどうしで同じ virtualenv を共有するのは「pipenv + direnv」だと難しいです。
pipenv なら pipenv local で同じ virtualenv を指定するだけなので楽なんですが...。
以下の例のように、片方のプロジェクトの virtualenv のディレクトリに、もう片方のそれへのシンボリックリンクを貼れば一応同じ環境で動かせますが、お行儀の良い使い方ではないと思います。

$ mkdir my_project1 my_project2
$ cd my_project1
$ pipenv install
$ ln -s $(pipenv --venv) ../my_project2/.venv

おわりに

pipenv を使うと実行環境の構築が pipenv install 一発で済んで非常に便利です。
依存パッケージの一括アップデートも pipenv update でできます。感動的。
他の人に同じ環境を用意してほしいときは PipfilePipfile.lock を渡すだけです。楽です。
pyenv もインストールしておくと、pipenv install するときにPython 本体のインストールもよしなにやってくれます。
「でも pyenv local みたいなのできないんでしょ?」って方は direnv をインストールしましょう。できるようになります。

それでは、良いPythonライフを。

Why do not you register as a user and use Qiita more conveniently?
  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
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  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