Skip to content

uv が高速に処理できる理由 #225

Description

@KATO-Hiro

1. 標準化による高速化

  • PEP 518: pyproject.toml を導入し、コード実行なしでビルド依存関係を宣言可能に。
  • PEP 517: ビルドフロントエンドとバックエンドを分離。
  • PEP 621: [project] テーブルを標準化し、依存関係を TOML 解析で取得可能に。
  • PEP 658: パッケージメタデータを直接 API に埋め込み、ホイールのダウンロードを不要化。

2. 削減による高速化

  • .egg サポートや pip.conf の無視。
  • デフォルトでバイトコードコンパイルをスキップ。
  • 仮想環境の必須化により、システム Python へのインストールを制限。
  • 厳格な仕様準拠と上限バージョン制約の無視。
  • 最初のインデックスで一致したパッケージを即座に選択。

3. Rust 不要の最適化

  • HTTP レンジリクエストを活用したメタデータ取得。
  • 並列ダウンロード。
  • グローバルキャッシュとハードリンクの利用。
  • Python を使わない解決プロセス。
  • PubGrub アルゴリズムによる効率的な依存解決。

4. Rust による最適化

  • ゼロコピーのデシリアライズ。
  • スレッドレベルの並列処理。
  • インタプリタ起動コストの削減。
  • コンパクトなバージョン表現。

5. 設計の重要性

  • Rust のみが高速化の理由ではなく、古いサポートを切り捨て、最新の標準を活用した設計が鍵。
  • 他のエコシステム(Cargo, npm)も静的メタデータと依存関係の事前解決を採用している点が参考になる。

これらの工夫により、uv は従来の pip よりも大幅に高速なパッケージ管理を実現しています。

抽象化

  • 高速な言語を使うだけではない
  • むしろ、その他の要因も同等かそれ以上に重要
    • 前提条件となっていたものを外す、削減、スキップ
    • DXのいいツールに置き換える
    • 並列化
  • 他のエコシステムの良い例を取り入れている

See

https://nesbitt.io/2025/12/26/how-uv-got-so-fast.html

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions