ryeとuvとはなにか
rye: Python のプロジェクトとパッケージ管理を包括的に行うことを目的に開発されているツール。 Python のバージョン管理・venv 管理・依存関係管理を一括で行えるのが特徴であり、タスクランナーなども付属している。
uv: pip と pip-compile を置き換えることを目標にしたツール。要するに依存関係が爆速なpipくらいの認識で良い。 Rust における cargo の立ち位置を目標に開発されており、rye は途中から内部的に uv を利用するようになった。
最近では uv が rye 同等のプロジェクト管理機能を持つようになり、2024.10.12 時点ではタスクランナー以外の rye でできることは uv でもできると言っていい状態だ。
将来的には uv が rye を吸収するとみられる。
ちなみに、uv を開発している astral-sh は Python用 Linter / Formatter として格を上げてきている ruff の開発元でもある。
移行のモチベーション
先ほど書いた通り、 rye と uv はプロジェクト管理ツールとしてほぼ同等の力を持っているので、すぐに移行する必要性はない。 それでも今 rye から uv へ移行することを決めたのには、renovateサポートが関係している。
uv のパッケージ解決は
- pyproject.toml の project.dependencies / tool.uv.dev-dependencies を見る
- それをもとに依存関係を解決
- 独自形式の uv.lock を生成する
のステップで行われるが、 renovateは pyproject.toml と uv.lock 両方のファイルに対する依存関係の自動更新に対応している。
要するに pnpm を使っているプロジェクトの依存関係を renovate で管理しているのと同等の体験が得られる。
今まで Python プロジェクトの依存関係自動更新はかなり面倒だったので、rye の体験に renovate の体験が加わるなら大変良いと思って移行を決めた。
移行方法
有志の方が rye-uv というツールを提供しているので、 migration はほぼこれだけで完了する。
rye のタスクランナーを使用していた場合は、uv にその機能がないため Warning が出る。 これは、 Makefile なり Taskfile なり poethepoet なりで対処できるのでよしなにする。
Renovate による管理を有効化する際は、 renovate.json に
"enabledManagers": ["pep621"] を追加すればよい。
おわり
おわり
おまけ: rye から uv へ移行した際のPR