はじめに
はれっ? nikkieです。
TechRAMENで話すPythonの依存ライブラリ管理ツールの補足記事です。
たっくさん紹介するので、比較表を記事にしてみます。
なお、使い出したツールも含むので、2024年7月時点の認識です。
今後使っていく中で理解が深まって更新される点があると思います。
目次(兼 比較ラインナップ)
比較表
どれも仮想環境を扱っていますが、細かい違いがあります
俺たち | Poetry | Rye | Hatch | shirabe | |
---|---|---|---|---|---|
ツールインストールにPythonが必要か | 必要 | 必要 | 不要 | どちらでもよい | 必要 |
Pythonのバージョン管理 | しない | しない | する | する | しない |
依存管理で開発者が操作するもの | pip コマンド |
poetry コマンド |
rye コマンド |
pyproject.toml |
shirabe コマンド |
仮想環境を開発者に意識させるか | Yes | No | No | No | Yes |
仮想環境の再現 | best effort | バージョンまで揃う | バージョンまで揃う | バージョンまでは揃わない | バージョンまで揃う |
ロックファイルの名前 | requirements.txt が多い | poetry.lock | requirements.lock | なし | requirements.txt |
ロックファイルの形式 | 作る場合、pip freeze の形式 |
独自形式 | pip freeze の形式 |
なし(pyproject.tomlにはバージョン固定まで書かない) | pip freeze の形式 |
俺たち
開発者がvenvやpipを操作して仮想環境を管理する方法です。
私たちは仮想環境管理ツールだったのです1。
Pythonチュートリアルなどで紹介されているメジャーな方法です。
- Pythonが使えればvenv(標準ライブラリ)やpip2が使える
- Pythonは別のツール3でバージョン管理する
- 私たちがコマンドを駆使して、仮想環境に依存ライブラリをインストールする
- 仮想環境の再現も私たちに委ねられている(
pip freeze
でライブラリとバージョンを書き出す)- 手順が漏れたために仮想環境を再現できないことがある
Poetry
「俺たち」のペインを解消する、「俺たち」よりも上位互換な依存ライブラリ管理ツールの一つとしてPoetryを取り上げました。
- インストールにはpipxがおすすめされている(Python環境が事前に必要)
- PoetryはPythonのバージョン管理まではしない
- 依存ライブラリを管理するとき、開発者は仮想環境を意識せずに操作する
- 開発者は
poetry install
などのコマンドを操作するだけで、Poetryが仮想環境をラップしている
- 開発者は
- 独自仕様の
poetry.lock
により、仮想環境はライブラリとバージョンを全て揃えて再現できる
Rye
Rust製ツール、Ryeを紹介しました。
- インストールにPython環境は不要
- RyeはPythonのバージョン管理もできる
- 依存ライブラリを管理するとき、開発者は仮想環境を意識せずに操作する(
rye sync
などのコマンド) pip freeze
で書き出したものに相当するrequirements.lock
により、仮想環境はライブラリとバージョンを全て揃えて再現できる
Hatch
いま私が推したいのはHatchです4。
- インストールにPython環境はあってもなくてもよい(インストーラも提供)
- HatchはPythonのバージョン管理もできる
- 依存ライブラリを管理するとき、開発者は仮想環境を意識しない
pyproject.toml
に記載するだけで、開発者がコマンドを打つことがない
pyproject.toml
には全てのライブラリのバージョンまでは記載しないため、仮想環境はライブラリは揃うが、バージョンまでは揃わない
pyproject.tomlは依存ライブラリのバージョンをガチガチに固定する用途ではないと理解しています。
(pip installしたいライブラリをバージョンの範囲で指定する。例:2系は使わない)
one more thing: shirabe
仮想環境ビルダーを自作しました。
- インストールにPython環境が必要(pipxがよいと思います)
- Pythonのバージョン管理はしない
- 開発者は仮想環境を意識する
- shirabeは「仮想環境を作り、依存ライブラリをインストール」というワークフローを自動化した
pip freeze
で書き出したものに相当するrequirements.txt
により、仮想環境はライブラリとバージョンを全て揃えて再現できる- 仮想環境の操作は十分には提供しておらず(模索中)、依存ライブラリの追加・削除を達成するには現状は作り直しとなる
終わりに
スライドだと画面幅の制約があり一覧表にしきれなかったので、記事として1本書いてみました。
こんな話ができるのは、小さな機能を組合せられるPythonならではだと感じています。
一方、具体ツールが細分化されてしまって、バベルの塔みたいになっちゃってもいるのですが…
できることをやっていきたいなと思ってます
スライドをお先にお届けします #techramen24conf
— nikkie / にっきー 技書博 け-04 Python型ヒント本 (@ftnext) 2024年7月26日
「one obvious wayを志向するPythonに依存ライブラリ管理ツールがたっくさんある話」https://t.co/PyrO70r3ue
すでに予定の便に乗り遅れており、各所にご助力いただき現在リカバリ中なのですが、前夜祭に間に合わなかったら大変ごめんなさい🙏 pic.twitter.com/D2raKA3zjr