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環境を選択できるようになる。