✂️

uvの古くなったoverride-dependenciesを検出・削除する「uv-override-prune」

に公開

脆弱性対応などで、依存パッケージの最低バージョンをuvのoverride-dependenciesに定義した場合、時が経って不要になったら削除したくなりませんか。constraint-dependenciesも同様です。

そんなときのために、古くなったバージョン定義を検出・削除できるツール「uv-override-prune」を作りました。

https://github.com/iwamot/uv-override-prune

以下、使い方のご紹介です。

インストール

uv向けのツールなので、uv tool install でインストールするのが分かりやすいと思います。

$ uv tool install uv-override-prune

検出対象の準備

LangChainに、ちょうどそういう例があったので題材にしてみます。

$ git clone --depth 1 https://github.com/langchain-ai/langchain
$ cd langchain/libs/partners/qdrant
$ git grep -e override-dependencies -e constraint-dependencies
pyproject.toml:override-dependencies = ["pillow>=12.1.1"]
pyproject.toml:constraint-dependencies = ["pygments>=2.20.0"]  # CVE-2026-4539

これらのバージョン指定 (pillow>=12.1.1, pygments>=2.20.0) はいずれも、推移的依存関係ツリーの更新により、もう書く必要がない状況です。

検出

実際に検出してみましょう。引数を省略すると、カレントディレクトリの pyproject.toml が対象になります。

$ uv-override-prune
=== override-dependencies (1 entry) ===
[PRUNE] pillow>=12.1.1  12.2.0

=== constraint-dependencies (1 entry) ===
[PRUNE] pygments>=2.20.0  2.20.0

Run with --fix to prune entries marked [PRUNE].

[PRUNE] となったパッケージは、定義が削除できます。消しても、解決されるバージョン (pillow 12.2.0, pygments 2.20.0) が下限を満たすためです。

削除

手で消すのが面倒な場合は --fix を付けます。

$ uv-override-prune --fix
$ git diff
diff --git a/libs/partners/qdrant/pyproject.toml b/libs/partners/qdrant/pyproject.toml
index b9af7f9..a6e97b6 100644
--- a/libs/partners/qdrant/pyproject.toml
+++ b/libs/partners/qdrant/pyproject.toml
@@ -70,8 +70,8 @@ typing = [
 # fastembed 0.7.x caps pillow<12.0. Override to pull in the fix for the lockfile.
 # Remove this override once fastembed releases a version that allows pillow>=12.1.1.
 [tool.uv]
-override-dependencies = ["pillow>=12.1.1"]
-constraint-dependencies = ["pygments>=2.20.0"]  # CVE-2026-4539
+override-dependencies = []
+constraint-dependencies = []  # CVE-2026-4539

 [tool.uv.sources]
 langchain-core = { path = "../../core", editable = true }

(行末のコメントまで消えれば便利ですが、現時点では未対応です)

おわりに

サプライチェーン攻撃対策の一環でオーバーライドしたものの、いつ消せばよいかモヤモヤしている方もいらっしゃるのではないでしょうか。uvをお使いの方は、お試しいただければ幸いです。

Discussion