この記事は 2017/9 に書かれたものであり、2019/11/26 現在とは状況が変わっています。公式ドキュメント(日本語訳)を参照してください。
時代は pipenv や
— うたがわきき🔰💊 (@utgwkk) September 5, 2017
もう誰も,requirements.txt や,source ENV/bin/activate
に頭を悩まされる時代は終わった!
というわけで virtualenv の時代は終わり*1,pipenv の時代になりました.
この記事は Python を書く人間が全員 pipenv を使うべきだという思いを込めて書きました.日本語で書かれた記事がまだぜんぜんないという事情もあります.
pipenv とは
Python のパッケージ管理ツールの pip と,環境切り分けツールの virtualenv を融合させたツールです.Ruby でいうところの Bundler を想像すると分かりやすいと思います*2.
Python Packaging User Guide でも pipenv が推奨されています.
インストール
もし pip コマンドがなければ ensurepip を試してください.
$ pip install pipenv
環境を作る
カレントディレクトリに Python3 の環境を作るには,
$ pipenv --three # Windows の場合は下記 # pipenv --python <python.exe へのパス>
を実行します*3. これによって環境が作られ,カレントディレクトリに Pipfile が作成されます.
サブコマンド一覧
pipenv check
Pipfile が PEP 508 (Python の依存パッケージ指定の書式) に従っているか確認します. 多くの場合は打たなくてもいいのではないでしょうか.
pipenv install
パッケージをインストールし,Pipfile に追加します.
$ pipenv install (package-name)
パッケージ名を指定しない場合は,Pipfile に記述されたうち dev-dependencies を除く パッケージがインストールされます.
pipenv lock
Pipfile.lock (後述) を作成します.
pipenv run
カレントディレクトリの Python の環境でコマンドを叩くことができます.Bundler で言うところの bundle exec
です.
たとえばこのディレクトリの環境で main.py
を実行したい場合は,このように.
$ pipenv run python main.py
もう activate してからコマンドを叩く必要はありません.グローバル環境に pipenv がインストールされており,かつ事前に pipenv install
を済ませてさえいればよいのです.
これを使うためだけに pipenv を入れたといっても過言ではありません.
pipenv shell
やっぱりまだ virtualenv を使いたい,activate したいという人のためのコマンドです.要するに source ENV/bin/activate
をします.
当方の環境ではプロンプトの表示は変わりませんでしたが,普通に exit
などで抜け出すことができます.
pipenv uninstall
パッケージをアンインストールし,Pipfile から削除します.
pipenv update
pip を最新版にアップデートし,環境を作成しなおします.
pipenv のいろいろ
dev-packages について
開発のみに使い,デプロイ時には使わない依存パッケージです.テスト用ライブラリとか. これまでは requirements-dev.txt のようなファイルに分かれていたものが1ファイルで済むようになりました.
$ pipenv install -d
で dev-packages を含めた全ての依存ライブラリをインストールできます.
Pipfile について
パッケージの依存関係などが TOML で記述されているファイルです. 自動で書き換えられていくのでそんなに触ることはなさそう(ほんとうか?).
Pipfile.lock について
$ pipenv lock
を叩くことで生成されるファイルです.Gemfile.lock とおおよそ同じ役割を果たしています.
環境はどこに保存されているの?
$ pipenv --venv
で確認することができます.~/.local/share/virtualenvs/
以下に適当なディレクトリが作成され,そこに保存されています.
Bundler みたくディレクトリを指定することはできないようです.
作成される環境の Python のバージョンは?
pipenv をインストールした Python のバージョンに依存します.
pipenv --three
ができるのは Python3 系に pipenv をインストールしたときだけです.
まあ今時 Python2 しか使えないような不幸な環境というのはそうそうないと思い込んでいますが…….
まとめ
もう誰も,requirements.txt や,source ENV/bin/activate
に頭を悩まされる時代は終わった!(再掲)
というわけで,環境切り分けのために2つのコマンドを駆使する時代は終わりました.
どんどん pipenv を使っていきましょう.