世界を動かす技術を、日本語で。

uv: Rustで書かれた非常に高速なPythonパッケージおよびプロジェクトマネージャー

概要

uv は、Rust製の超高速なPythonパッケージ・プロジェクトマネージャー。 pippoetry など複数ツールの機能を一括提供。 10~100倍 の速度やグローバルキャッシュによる効率化。 Pythonバージョン管理 やスクリプト実行もサポート。 クロスプラットフォーム 対応で、簡単インストール可能。

uv:高速Pythonパッケージ&プロジェクトマネージャー

  • uv はRustで開発された、Pythonプロジェクト管理のための オールインワンツール
  • pip, pip-tools, pipx, poetry, pyenv, twine, virtualenv などの機能を一つに統合
  • 10~100倍の高速化 を実現したパッケージ管理
  • ユニバーサルロックファイル による一貫した依存関係管理
  • スクリプト実行インライン依存関係メタデータ のサポート
  • Pythonバージョンのインストール・切替 機能
  • Pythonパッケージとして公開されたCLIツール の実行・インストール
  • pip互換インターフェース で、既存のワークフローを崩さず高速化
  • Cargoスタイルのワークスペース による大規模プロジェクト対応
  • グローバルキャッシュ でディスク効率と依存関係の重複排除
  • RustやPython不要 でcurlやpipから簡単インストール
  • macOS, Linux, Windows 対応
  • Astral(Ruff開発元) がバックアップ

インストール方法

  • スタンドアロンインストーラー によるインストール
    • macOS/Linux: curl -LsSf https://astral.sh/uv/install.sh | sh
    • Windows: powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex"
  • PyPI経由インストール
    • pip: pip install uv
    • pipx: pipx install uv
  • スタンドアロンインストーラー利用時は uv self updateで自己アップデート可能
  • 詳細・他の方法は公式ドキュメント参照

主な機能

  • プロジェクト管理

    • 依存関係・環境・ロックファイル・ワークスペース管理
    • ryeやpoetryに似た使い勝手
    • 例:
      • uv init example でプロジェクト初期化
      • uv add ruff で依存追加&仮想環境構築
      • uv run ruff check でツール実行
      • uv lock で依存ロック
      • uv sync でロックファイルと環境同期
    • uv管理外プロジェクトのビルド・公開もサポート
  • スクリプト管理

    • 単一ファイルスクリプトの依存・環境管理
    • インラインメタデータで依存宣言
    • 例:
      • uv add --script example.py requests で依存追加
      • uv run example.py で仮想環境下でスクリプト実行
  • ツール管理

    • Pythonパッケージとして公開されたCLIツールの実行・インストール
    • 一時環境での実行(uvx/uv tool run
    • 永続インストール(uv tool install
    • 例:
      • uvx pycowsay 'hello world!' で即時実行
      • uv tool install ruff でツールインストール&バージョン確認
  • Pythonバージョン管理

    • 複数Pythonバージョンのインストール・切替
    • 例:
      • uv python install 3.10 3.11 3.12 で複数バージョン導入
      • uv venv --python 3.12.0 で指定バージョン仮想環境作成
      • uv run --python pypy@3.8 -- python --version でPyPy利用
      • uv python pin 3.11 でディレクトリ単位のバージョン固定
  • pip互換インターフェース

    • pip, pip-tools, virtualenvのコマンド互換
    • 追加機能:依存バージョン上書き、プラットフォーム非依存解決、再現性解決
    • 例:
      • uv pip compile docs/requirements.in --universal --output-file docs/requirements.txt で要件ファイル生成
      • uv venv で仮想環境作成
      • uv pip sync docs/requirements.txt で一括インストール

ドキュメント・サポート

  • 公式ドキュメント : https://docs.astral.sh/uv
  • コマンドラインリファレンス:uv help
  • プラットフォーム対応状況、バージョンポリシー、貢献方法、FAQも公式サイト参照

FAQ・その他情報

  • uvの発音 : "you - vee"(/juː viː/)
  • 表記 :"uv"(小文字)
  • 依存解決 :PubGrub方式を採用
  • Git実装 :Cargoをベース
  • 最適化 :pnpm, Orogene, Bun等から着想
  • Windowsサポート :Posyのtrampolineを応用
  • ライセンス :Apache 2.0 または MIT(選択可能)

まとめ

  • uv はPython開発の生産性と速度を大幅に向上させる 次世代マネージャー
  • 既存ツールの置き換え高速化一貫性のある依存管理 を実現
  • インストール・運用が容易 で、幅広いプラットフォームに対応

Hackerたちの意見

最近、ノートパソコンで個人的なことに使い始めたんだけど、pipに慣れてると、これがめっちゃ速くて混乱する。何度も、返ってくるのが早すぎて動いてないのかと思ったことがあるよ。

UV最高!アストラルチームのRuffも大好き。pylintとBlackからRuffにリントとフォーマットを切り替えたら、リントの時間が90秒から1.5秒未満に減った。マジでクレイジー!

uv add --script mycoolscript.pyが大好き!それに# !/usr/bin/env -S uv runを上に追加して、Pythonスクリプトを簡単に実行できるようにしてる。最高だね!

すごくクールだよ。今では、すぐに実行できる小さなスクリプトを習慣的に作ってる。環境や依存関係を管理するよりずっと楽だね。- https://everything.intellectronica.net/p/the-little-scripter - https://www.youtube.com/watch?v=8LB7e2tKWoI - https://github.com/intellectronica/ez-mcp

e: あなたの例を読み間違えたから、以下の'uv add --script'とプロジェクトの文脈での'uv add'の無関係なパターンマッチングは無視して!~~それはカレントワーキングディレクトリのプロジェクト/envを変えちゃうよ。彼らのドキュメントにはたくさん情報があるけど、run --withやuvのPEP723サポートの方がもっと好きだと思うよ~~ https://docs.astral.sh/uv/guides/scripts/

Marimo.ioのノートブックをアプリモードで使ってこのトリックを試してる。最小限の前提条件で他の人に送れる、即反応型の再現可能なアプリができる。めっちゃホットな組み合わせだね。

特別な指示を与えてClaudeプロジェクトを作ったんだけど、これで一つのプロンプトからインライン依存関係を持つ完全なスクリプトを出力できるんだ。リンクはこちら: https://simonwillison.net/2024/Dec/19/one-shot-python-tools/ Claude 4のトレーニングカットオフ日は2025年3月なんだけど、確認したらClaude Sonnet 4は特別な指示なしでこれができるみたい。URLを渡すとhttpxとbeautifulsoupを使ってスクレイピングして、ページ上のすべてのリンクのCSVを返してくれるんだ - URLとリンクテキストも含めて。これがその出力で、依存関係についてはちゃんとやってくれたよ: https://claude.ai/share/57d5c886-d5d3-4a9b-901f-27a3667a8581

uvとruffは、「決して車輪を再発明するな」って言う人たちへの素晴らしい反例だよ。やるだけのためにやるのはダメだけど、目標が明確なら、時には桁違いに良い製品を生み出せることもある。

車輪を再発明したわけじゃなくて、「ただ」すべての木をもっと耐久性のある素材に置き換えて、10倍の速さで回転できるようにしたんだ。

Pythonのパッケージ管理の歴史を見てると、みんな現状よりも良い方法があると思ってるよね。

量的に言えば、話がそれるけど、なんで「10倍」じゃなくてあのフレーズが使われるんだろうね。もっと短いのに。

正直「車輪を再発明するな」って言葉、全然意味がわからないよね。今も木の円盤を車輪として使ってるわけじゃないし、旧石器時代からずっともっと良い車輪を発明してきたんだから。ソフトウェアでも同じことをしていいんじゃない?

初めてuvを使ったとき、間違えたか何かをタイプミスしたんじゃないかって思ったよ。だって、処理がpipで経験したどんなものよりもずっと早く終わったから。

同じく笑!体験がすごくスムーズで、Pythonって感じがしなかった。

同感。最初は半信半疑だったけど、試してみたら戻れなくなった。

先週同じ体験をしたばかりで、これもちゃんと動いてないんじゃないかって思ってた。今はすっかりファンだよ。

たまにuvがパッケージをインストールするのに200msかかることがあって、Enterを押してから次のシェルプロンプトが表示されるまでにちょっとした遅延を感じることがある。でもPoetryではそんな問題はないよ。コーヒーを入れに行って、数分後に戻ると大体終わってる。

数ヶ月前、私は絶対にuvを使わないって言ってたんだ。venvとpipに慣れてたし、もう別のツールは必要ないと思ってた。でも今はPythonのすべてにuvを使ってる。切り替えた理由は、root権限がない共有サーバーで、壊れたパッケージやドライバーがいろいろあって、pytorchが必要だったから。何も動かなくて、pipはすごく時間がかかってた。各ユーザーには10GBのストレージが割り当てられてて、pipのキャッシュがめちゃくちゃスペースを取ってて、場所をちゃんと変えられなかった。uvに切り替えたら、すべてがうまくいったよ。まだ使ってないなら、ほんとに5分だけ試してみて。後悔しないから。

数ヶ月前、私は絶対にuvを使わないって言ってたんだ。venvとpipに慣れてたし、もう別のツールは必要ないと思ってた。 ほんとに? :) requirements.txtは地獄で拷問だよ。もしuvやPoetry、PDMみたいな現代的なプロジェクト/依存関係管理ツールを使ったことがあれば、pip+requirements.txtには戻れないよ。クレイジーでめちゃくちゃだもん。uvは超速くて素晴らしいツールだけど、まだ粗さやバグがあるね。

「ASDF」を使ってたけど、しばらくしてから「mise」に移行したんだ。これと比べて、もっと一般的な緑系のものはどうなんだろうね。

自分のパソコンでスクリプトを実行する時、依存関係の管理なんて全然気にしないんだ。ライブラリの最新バージョンを一つだけ、グローバルにインストールできればそれでいい。pipがやってることみたいにね。古いスクリプトが壊れたことはないと思う。多分、あんまりソフトウェアを動かさないからだろうね。すべてのバージョンを明示的に書き出して、プロジェクトごとにライブラリを再インストールするのは、余計な手間やタイピングが増えて、複雑さが増すだけで、あんまり好きじゃない。だから「pip install requests」って打って、次の数年間はどのREPLやスクリプトでも「import requests」ができるのが好きなんだ。たまにBashのエイリアスを使って依存関係をアップグレードするけど(これ、pipが14年経ってもまだ持ってない機能なんだよね)。依存関係に問題があったら、インポート文が何を意味するかをコミット単位でコントロールできるシステムを絶賛するのもわかるけど、私は最小限のタイピングや思考で済むシステムが好きだし、きっと私は静かな多数派の一員だと思う。

Pythonの世界からしばらく離れてたけど、グローバルインストールはローカルインストールの特別なケースで、スクリプト間で共有されるべきだと思う。基本的にnpmやyarnの動き方と同じだよね。uvがこういうのをすでにサポートしてないのはちょっと驚きだな。もしかしたら、ディストリビューションがuvを基にしたグローバルなPythonパッケージ管理をするべきなのかも?

これが小さな実行可能スクリプトを動かすための新しいお気に入りだよ: #!/usr/bin/env -S uv --quiet run --script

/// script

requires-python = ">=3.13"

dependencies = [

"python-dateutil",

]

///

[dateutilが必要なPythonスクリプト]

ずっと幸せに使ってるし、その前はryeを使ってた。今日、インターネットがないコンピュータラボの20台のPCにセットアップしたばかりで、vs codeといくつかの主要なパッケージも一緒に入れた。ファイルをダウンロードして、PowerShellスクリプトを作ったら、Jupyterとかも全部うまく動いてるよ…子供たちに興味を持たせるのが次の課題だな…

プロジェクトがどうしてそんなに速いのか、もう少し知りたい人にはとても関連性のある話だよ。 https://www.youtube.com/watch?v=gSKTfG1GXYQ