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%未満に抑えられます。
HNでの議論
92- notatallshaw
pipのメンテナーとして、私は長い間uvのキャッシュのトレードオフを検討してきました。これは、uvがpipよりもウォームインストールを高速にする最大の要因です。pipは元のディストリビューションをキャッシュして毎回解凍するのに対し、uvは解凍済みのディストリビューションをキャッシュし、可能であればハードリンクします。
しかし、常に2つの大きな問題がありました:
1. 「ダウンロード」コマンドで正確なディストリビューションを再現する方法がない(「pip download」に相当するuvのコマンドがない)
2. 多くの異なる環境を持つ人にとって、キャッシュはpipよりも大幅に増大する
これが2を大幅に改善するかどうか、少なくとも経験的に見てみたいです。そうであれば、ディスク容量の大きなコストをかけずに2層キャッシュ戦略を採用できるかもしれません。
- mark_l_watson
良い改善ですね。私にとって、uvは「PythonのQuicklisp」です。uvのおかげで、Common Lispをより使いやすくしてくれるQuicklispのように、Pythonを楽しんで使えるようになりました。
私はずっとLispの信奉者ですが、数年前にuvを使い始めてから、Pythonを本当に楽しめる言語として見るようになり、Python開発環境をほぼ摩擦なくするための努力をしてきました。
- stephenlf
uvは現代のPythonライブラリの基盤です。改善を見られて嬉しいです。
- CivBase
キャッシュサイズの10%削減と引き換えに4%の速度低下は、私には明らかに価値があるとは思えません。特に複雑さが増すことを考えるとなおさらです。
- TacticalCoder
> ファイルレベルの重複排除:すべてのファイルはBLAKE3ハッシュの下に保存される
Blake3は本当に驚くほど高速な暗号化ハッシュです。私は自分の「重複排除 / 整合性 / ベルゼルカー」ユーティリティ(LLMが登場する前に作ったもの)に使っています。
もし次のようなファイルがあった場合:
DSC98731-b3-7b39197a22.JPG
次に:
- そのファイルが7b39197a22にチェックサムで一致しなければ、ファイルの整合性に問題がある(素晴らしいことで、すでに問題のトラブルシューティングに役立ちました)
- 他のファイルが同じBlake3 7b39197a22ハッシュを持つなら、それは重複です
- その7b39197a22チェックサムが私のデータベースにあれば、「何かが起こり得る」
例えば、私のDBは「Blake3ハッシュが7b39197a22のファイルは常に削除してよい」と言ったり、「Blake3ハッシュが887463c09eのファイルで、一般的なファイル名(「dscXXXXX」など)なら、常に「20260722jackJohnAtTheBeach-b3-778463c09e.jpg」などにリネームしてよい」と言ったりできます。
これは本当に素晴らしいです(ここにいる何人かが独立に同様のスキームを作ったのを知っています)。そしてBlake3はこういった用途には驚くべきハッシュです。