はじめに
最近話題の 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 でインストールできます。apt
や brew
でもインストールできるようなのでお好みで。
pip install pipenv
詳しくは以下のURLを参照してください。
- https://pypi.org/project/pipenv/
- https://pipenv-ja.readthedocs.io/ja/translate-ja/install.html#installing-pipenv
direnv
インストール方法は以下のURLを参照してください。
コンパイル済みのバイナリを使う方法とソースからコンパイルする方法があります。
- https://github.com/direnv/direnv#from-binary-builds
- https://qiita.com/kompiro/items/5fc46089247a56243a62
補足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
でできます。感動的。
他の人に同じ環境を用意してほしいときは Pipfile
と Pipfile.lock
を渡すだけです。楽です。
pyenv もインストールしておくと、pipenv install
するときにPython 本体のインストールもよしなにやってくれます。
「でも pyenv local
みたいなのできないんでしょ?」って方は direnv をインストールしましょう。できるようになります。
それでは、良いPythonライフを。