Posted at

Python開発の"常識"として知っておきたい、Pipenv


Pipenvとは?

Pythonのプロジェクト管理ツールです。

例えるならば、


  • JavaのMaven/Gradle

  • node.jsのnpm/Yarn

  • Railsのbundler

などに当たるものです。


何ができるのか?

Pipenvは、例えば以下のようなことができます。



  • 本番用/開発用それぞれ向けにライブラリのバージョンを Pipfile に残せます。


    • Pythonそのもののバージョンも含めて、残せます。


    • Pipfile.lockも残して、常に同じ結果にできます。(requirements.txtだけでは大変手間!)

    • バージョンの指定は、requirements.txt同様、厳密にしたり柔軟にしたりできます。




  • Pipfile に合わせて、自動でプロジェクト用の仮想環境を作れます。


    • virtualenvと連携して作成されます。

    • 作った環境は、エディタ(VS CodeやPyCharmなど)からも認識されます。

    • その他ツール(CircleCIやtoxなど)などとの連携も増えてきているようです。

    • もしpyenvをインストールしておけば、指定したPythonバージョンを自動で用意してくれます。




  • Pipfilerequirements.txt からインポート/エクスポートできるので、すぐ始められます。



    • requirements.txtpip freezeで作れるので、なくても大丈夫

    • anacondaなどのPythonディストリビューションを使っていても、再利用できます。



その他機能もあるので、具体的には本家サイトも見てみてください。

2017年ぐらいからの、比較的新しいツールですが、

トップページにあるリンク(目次)を見るだけでも、十分な機能とドキュメントが用意されているのがわかります。

個人的に、使い心地もよく気に入っています。ぜひ使ってみてください。


本家サイト

ドキュメント(英語)

https://pipenv.readthedocs.io/en/latest/

ドキュメント(日本語訳)

https://pipenv-ja.readthedocs.io/ja/translate-ja/

Github

https://github.com/pypa/pipenv


Pipenvを使ってみる


インストール

システム全体に関わるパッケージが壊れないよう、--userオプションを付けています。

$ pip install --user pipenv


気にしない人向け

$ pip install pipenv



Macユーザ向け

$ brew install pipenv



使い方


プロジェクトを新規作成する場合

実行すると、Pipfileが作成されます。


Python3系の場合

$ pipenv --three



Python2系の場合

$ pipenv --two



Pythonのバージョンを指定したい場合

$ pipenv --python 3.6.5



requirements.txtが既にあるプロジェクトの場合

プロジェクトを新規作成する場合と全く同じです。

requirements.txtがあれば読み込んで、Pipfileを作成し、かつインストールも行います。

明示的にパスを指定することも可能です。

-r path/to/requirements.txtを追加してください。


ライブラリを新たにインストールする場合

基本的には、よくあるpipによるインストールコマンドをpipenvに読み替えるだけです。

実行すると、更新されたPipfilePipfile.lockが作成されます。


最新バージョンをインストール

$ pipenv install requests



開発用にインストール

$ pipenv install --dev autopep8



バージョンを厳密に指定

$ pipenv install "requests==2.20.0"



マイナーバージョンの違いを許容

$ pipenv install "requests~=2.20.0" # 2.20.1がインストールされる



開発中のモジュールをeditableモードでインストール(※要setup.py)

$ pipenv install --dev -e .



仮想環境を作成する

git cloneなどでPipfileなどをダウンロードしてきた場合に実行します。

プロジェクトを新規作成する場合を実行済みならば、既に作成済みの状態です。


開発向け仮想環境

$ pipenv install --dev



本番と同じ仮想環境

$ pipenv install



デプロイ(Pipfile.lockを更新せずエラーにする)

$ pipenv install --deploy


もし仮想環境をリセットしたければ、削除して再作成すればよいです。


削除

$ pipenv --rm



仮想環境を使う

1コマンド実行すればよいならば、以下を実行します。

$ pipenv run <コマンド> <オプション>...

作成された仮想環境をactivateするならば、以下を実行します。

$ pipenv shell

もし、よく使うコマンドがあれば、Pipfileにショートカットを書いておくことができます。

CIツールなどと連携する際に有用そうです。


Pipfile

[scripts]

hello = "python -c \"print('Hello')\""

と書いた前提で、以下を実行します。

$ pipenv run hello


出力結果

Hello



requirements.txtを作成する

実行すると、依存ライブラリ含めてバージョン付きで生成されます。

$ pipenv lock -r > requirements.txt


参考

本家サイト

A Better Pip Workflow

https://www.kennethreitz.org/essays/a-better-pip-workflow

pipfile-vs-setuppy

https://pipenv-ja.readthedocs.io/ja/translate-ja/advanced.html#pipfile-vs-setuppy