Pipenvはpythonのパッケージ管理システムで、従来requirements.txtで管理していた依存関係をより使いやすく管理してくれる夢のシステムである。 そのうえ、pyenvと組み合わせてpythonの仮想環境も同時に管理することができるので、pythonバージョンも含めた依存性も管理することができる。 これはsuperすごいやつ。 javascriptで言うところのnpmのようなもので、この存在を知ったおかげで私はpython開発が楽しくなった。 ありがたいありがたい。

セットアップ 

pyenvのセットアップ 

pyenvがあると便利なのでインストールしておく

macOSの場合 

$ brew install pyenv

linuxの場合 

$ curl -L https://github.com/pyenv/pyenv-installer/raw/master/bin/pyenv-installer | bash

.bashrcとかに以下を書いて初期化する必要がある。

export PATH="~/.pyenv/bin:$PATH"
eval "$(pyenv init -)"
eval "$(pyenv virtualenv-init -)"

Windowsの場合 

どうすりゃいいんですかね。誰かなんとかしてください。

pipenv のセットアップ 

pipenvをインストールする。

pip install pipenv

プロジェクトの作成 

# これでprojectで使われるpythonのバージョンが固定される
$ pipenv --python 3.6.5
# ただし、minor versionまで、例えばこの場合「3.6」に固定される
# 指定したバージョンのpythonがなくてもpyenvでinstallしてくれる

# 必要なpackageを追加していく
$ pipenv install pandas matplotlib numpy scipy
# もちろん一個づつ追加していける
$ pipenv install scikit-learn
# 開発のためだけに使うpackageは `--dev` をつける
$ pipenv install --dev jupyter
# pypiに登録されていないpackageもgithubのurlを指定することで管理できる
$ pipenv install -e git+https://github.com/kennethreitz/background.git#egg=background

Tips 

一度作成した仮想環境を消す 

作成したプロジェクトでinstallしたのち、pythonのバージョンを変えたりするにはこれが必要。

$ pipenv --rm

pipenvで作った環境をjupyter notebookから見る 

pipenvで作った実行環境をjupyter notebookから使いたいことがあるが、そのためにpipenvを使ってjupyter notebookをinstallすると、pipenv環境ごとにjupyter notebookの設定をやり直さなくてはならない。 私はjupyter notebookにvim拡張を入れて愛用しているので、そのような設定をやり直すのは面倒で仕方ないことになる。

そこで、jupyter notebookはシステムにinstallしたものを使い、実行に使うkernelとしてpipenvの環境を参照できるようにする。 そのために、pipenv環境にipykernelのinstallが必要となる。

$ pipenv install --dev ipykernel

そして、pipenvの shellを立ち上げて設定する。 これにはpipenvのpythonのバージョンがpython3系じゃないとうまくいかないっぽい。

$ pipenv shell
# pipenv 
python -m ipykernel install --user --name=`basename $VIRTUAL_ENV`

すると、[Kernel] => [Change Kernel] からpipenvのpython環境を選択できるようになる。