pipenv

Pythonの環境を作りたいなら1番に考えるべきものはこれから紹介するpipenvです.

pipenvはプロジェクト毎に仮想環境というものを作っていくのですが, 取り敢えず仮想環境はわからなくても良いです. 別の機会に理解していきましょう.

今回これをオススメするのは今後半年後, 1年後自分が見直す時, また卒業して後進にプロジェクトを引き継ぐ際に非常に楽になるためです.

私が学部4年でとあるプロジェクトを引き継いだ時, 悲惨な目にあったのでそうならないようはじめから意識していきましょう.

Install

for Mac 🍎

❯ brew install pipenv

for Ubuntu18.04 🐧

❯ sudo pip install --user pipenv

Usage

新入生課題をPythonで解くことを考えましょう. まずは適当な作業ディレクトリを作成し, そこに環境を整えていきます.

❯ mkdir new_comer_works; and cd new_comer_works
❯ pipenv install numpy jupyter sklearn matplotlib

上記のコマンドでnew_comer_worksディレクトリ以下にはPipfileとPipfile.lockという二つのファイルが生成されていると思います. しばらくはこれらのファイルは必要ないのでそのままにしておきましょう.

今回インストールしたライブラリを使いたい時には仮想環境というものの中に入る必要があります.

❯ pipenv shell
.venv ❯

このコマンドで入るとプロンプトが二行目のように変化すると思います. この状態でpythonを起動すると先ほど入れたライブラリを呼び出すことができます. この仮想環境から出るためにはCtrl+Dを押すことによって抜けることができます.

もう一つ仮想環境に入る方法があり, こちらの方法はコマンドごとに仮想環境に入って実行して抜けるといった動作をするものになります.

❯ pipenv run python

ある実行ファイルhoge.pyを引数--foo=barで実行したい場合にも先頭にpipenv runをつけるだけで,

❯ pipenv run python hoge.py --foo bar

で実行することができます.

pipenv環境の再現

Pythonのパッケージは日々更新されているものも多く, 今最新のライブラリを使っていたとしても時が経てば古くなってしまいます. さらに個々のパッケージは他のパッケージとの整合性に関係なくそれぞれ更新されていってしまいます. これがどういう自体をもたらすかというと, 今現在動いているスクリプトも将来的には動かなくなってしまうかもしれない危険性があるということを意味します. 自分用の書き捨てのスクリプトならいざ知らず, 研究室に残るプログラムであれば後進がぐちゃぐちゃの依存関係を解決するなんてもってのほかです. そのため自分が書いたスクリプトに責任を持つようにしましょう.

そこで今回用いるのがPipfile.lockです. Pipfile.lockにはpipenv installしたときに実際にインストールされたパッケージのバージョン情報が記されています. このファイルは自分で編集することは決してないのですが, このファイルのおかげで他の人のPCであったり, 自分のPCに新しく同じ環境を用意したりすることが容易にできるようになります.

❯ ls  # Pipfile.lock ...
❯ pipenv sync

これで実験した当時のPython環境が再現されます. 人とのやり取りはもちろんですが, 過去の自分とのやり取りで苦労することのないよう, このような技があることを覚えておくと良いでしょう.

Try!

  • pipenvを使った仮想環境からJupyter notebookを起動してみましょう.