uvとRye

先週にRuffを開発しているAstralがuvを発表しました。

astral.sh

uvは現在のところはvenv, pip, pip-toolsの基本的な機能を提供していますが、将来は"Cargo for Python"になることを目標にしています。

一見すると乱立しているPythonのパッケージ管理ツールにもう一つ加わったように見えますが、Ryeの開発者のArminとuvの開発チームは連携していて、同時に次のような発表をしています。

uv: Python packaging in Rust

Rye Grows With UV | Armin Ronacher's Thoughts and Writings

  • Ryeはもともとより良いパッケージツールがどうあるべきかの実証のために作られていて、中身は既存のツールのツギハギだった
  • Ryeがpip-toolsやvirtualenvの代わりにuvを使うオプション rye config --set-bool behavior.use-uv=true を提供する
  • いつかuvがRyeの機能に追いつくまでRyeの開発は当面続く
  • RyeはAstralが引き継ぎ、Arminも当面Ryeの開発に参加する

ということで、Ryeを使っている人はuvを直接使う必要はなく、試してみたい場合は上記の設定をするのがよさそうです。

私の場合はIssue報告を再現するためにパッケージをインストールしてスクリプトを実行するのにはまだvenvとpipの方が簡単なので、直接uvを使う機会も多いです。その場合の使用感を書いておきます。

venvとuv venvの比較

  • venv の時は alias mkvenv='python3 -m venv --prompt . .venv' というエイリアスを使っていた
  • uv venv はターゲットパスを指定しないと ".venv" を使うので一手間少ない
  • --prompt オプションがなかったのでuvにプルリクエストを送って取り込んでもらった。今朝リリースされた0.1.6に入っている。
  • --prompt . がデフォルトなので、上記エイリアス--prompt . も不要で、 uv venv だけでOK。もうエイリアスいらない。
  • ただし、 rye pin 3.12 してから mkvenv したら rye 管理のPython 3.12を使ってくれるのに、uv venvは which python3.12 で見つからないとエラーになるのでPATHを通しておくなどの手間が必要になる

pipとuv pipの比較

  • pipはvirtualenvを有効にしないとホストのPythonにライブラリをインストールしようとしてしまうが、uv pipは .venv ディレクトリがあるとそっちにインストールしてくれる。
    • activateの手間がない
    • venvの中にpip/uvをインストールしておく必要もないのでvenvの中がより軽量になる
  • とにかくすごく速くて気持ちいい
このブログに乗せているコードは引用を除き CC0 1.0 で提供します。