nikkie-ftnextの日記

イベントレポートや読書メモを発信

#techramen24conf 補足記事:たっくさんあるPython依存ライブラリ管理ツールの比較表

はじめに

はれっ? 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ならではだと感じています。
一方、具体ツールが細分化されてしまって、バベルの塔みたいになっちゃってもいるのですが…
できることをやっていきたいなと思ってます


  1. 先日私のPython歴は仮想環境管理ツールとしての歴と一致することに気づきました
  2. ensurepipされています
  3. pyenv, asdf, miseなど
  4. Pythonプロジェクトの管理ツール Hatch、私も、気になります! - nikkie-ftnextの日記