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バージョンを自動で用意してくれます。
-
Pipfile
はrequirements.txt
からインポート/エクスポートできるので、すぐ始められます。-
requirements.txt
はpip 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
$ brew install pipenv
使い方
プロジェクトを新規作成する場合
実行すると、Pipfile
が作成されます。
$ pipenv --three
$ pipenv --two
$ pipenv --python 3.6.5
requirements.txt
が既にあるプロジェクトの場合
プロジェクトを新規作成する場合と全く同じです。
requirements.txt
があれば読み込んで、Pipfile
を作成し、かつインストールも行います。
明示的にパスを指定することも可能です。
-r path/to/requirements.txt
を追加してください。
ライブラリを新たにインストールする場合
基本的には、よくあるpip
によるインストールコマンドをpipenv
に読み替えるだけです。
実行すると、更新されたPipfile
とPipfile.lock
が作成されます。
$ pipenv install requests
$ pipenv install --dev autopep8
$ pipenv install "requests==2.20.0"
$ pipenv install "requests~=2.20.0" # 2.20.1がインストールされる
$ pipenv install --dev -e .
仮想環境を作成する
git clone
などでPipfile
などをダウンロードしてきた場合に実行します。
プロジェクトを新規作成する場合を実行済みならば、既に作成済みの状態です。
$ pipenv install --dev
$ pipenv install
$ pipenv install --deploy
もし仮想環境をリセットしたければ、削除して再作成すればよいです。
$ pipenv --rm
仮想環境を使う
1コマンド実行すればよいならば、以下を実行します。
$ pipenv run <コマンド> <オプション>...
作成された仮想環境をactivateするならば、以下を実行します。
$ pipenv shell
もし、よく使うコマンドがあれば、Pipfile
にショートカットを書いておくことができます。
CIツールなどと連携する際に有用そうです。
[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