uv、wheelキャッシュ内の全ファイルを重複排除して容量を約10%削減

uv: Deduplicate all files in the wheel cache

PythonパッケージマネージャーuvのPR #21327では、wheelキャッシュ内のファイルをBLAKE3ハッシュに基づいて重複排除する機能が提案されています。従来はwheel単位でのみコンテンツアドレス型キャッシュをサポートしていましたが、この変更によりファイル単位での重複排除が可能になります。ファイルは`files-v0`バケットに保存され、ハードリンクによって元の場所にリンクされるため、インストールプロセスは変わりません。ローカル環境でのテストでは、キャッシュサイズを約10%(545.2 MiB)削減しつつ、コールドインストールの速度低下は4%未満に抑えられています。

ファイル単位での重複排除により、キャッシュサイズを約10%削減しつつ、コールドインストールの速度低下は4%未満に抑えられます。
  1. notatallshaw

    pipのメンテナーとして、私は長い間uvのキャッシュのトレードオフを検討してきました。これは、uvがpipよりもウォームインストールを高速にする最大の要因です。pipは元のディストリビューションをキャッシュして毎回解凍するのに対し、uvは解凍済みのディストリビューションをキャッシュし、可能であればハードリンクします。

    しかし、常に2つの大きな問題がありました:

    1. 「ダウンロード」コマンドで正確なディストリビューションを再現する方法がない(「pip download」に相当するuvのコマンドがない)

    2. 多くの異なる環境を持つ人にとって、キャッシュはpipよりも大幅に増大する

    これが2を大幅に改善するかどうか、少なくとも経験的に見てみたいです。そうであれば、ディスク容量の大きなコストをかけずに2層キャッシュ戦略を採用できるかもしれません。

  2. mark_l_watson

    良い改善ですね。私にとって、uvは「PythonのQuicklisp」です。uvのおかげで、Common Lispをより使いやすくしてくれるQuicklispのように、Pythonを楽しんで使えるようになりました。

    私はずっとLispの信奉者ですが、数年前にuvを使い始めてから、Pythonを本当に楽しめる言語として見るようになり、Python開発環境をほぼ摩擦なくするための努力をしてきました。

  3. stephenlf

    uvは現代のPythonライブラリの基盤です。改善を見られて嬉しいです。

    https://stephenlf.dev/blog/python-library-in-2026/

  4. CivBase

    キャッシュサイズの10%削減と引き換えに4%の速度低下は、私には明らかに価値があるとは思えません。特に複雑さが増すことを考えるとなおさらです。

  5. TacticalCoder

    > ファイルレベルの重複排除:すべてのファイルはBLAKE3ハッシュの下に保存される

    Blake3は本当に驚くほど高速な暗号化ハッシュです。私は自分の「重複排除 / 整合性 / ベルゼルカー」ユーティリティ(LLMが登場する前に作ったもの)に使っています。

    もし次のようなファイルがあった場合:

    DSC98731-b3-7b39197a22.JPG

    次に:

    - そのファイルが7b39197a22にチェックサムで一致しなければ、ファイルの整合性に問題がある(素晴らしいことで、すでに問題のトラブルシューティングに役立ちました)

    - 他のファイルが同じBlake3 7b39197a22ハッシュを持つなら、それは重複です

    - その7b39197a22チェックサムが私のデータベースにあれば、「何かが起こり得る」

    例えば、私のDBは「Blake3ハッシュが7b39197a22のファイルは常に削除してよい」と言ったり、「Blake3ハッシュが887463c09eのファイルで、一般的なファイル名(「dscXXXXX」など)なら、常に「20260722jackJohnAtTheBeach-b3-778463c09e.jpg」などにリネームしてよい」と言ったりできます。

    これは本当に素晴らしいです(ここにいる何人かが独立に同様のスキームを作ったのを知っています)。そしてBlake3はこういった用途には驚くべきハッシュです。

この日のほかの記事

2026-08-31