↪️

uv Publishがmetadataが何たらで失敗した

2025/01/07に公開

tl;dr

build設定をこのように書く

pyproject.toml
[build-system]
requires = ["hatchling"]
build-backend = "hatchling.build"

以下は気になった人向けの記録

前提

Pythonのパッケージ管理ツールとしてRyeを愛用していたが、機会がありuvで開発していた。タスクランナーがないこと以外は概ね最高。

https://docs.astral.sh/uv/getting-started/

uv のパッケージ公開事情

公式を見るとわかる通り、uvだとpypiへの登録がめちゃくちゃ便利。uv buildしてuv publishするだけ。

https://docs.astral.sh/uv/guides/publish/

だけ、だと思ったらuv publishで400エラーが出てハマった。

Upload failed with status code 400 Bad Request. Server says: 400 license-file introduced in metadata version 2.4, not 2.1. See https://packaging.python.org/specifications/core-metadata for more information.

publish失敗の理由

小一時間Build設定をいじってもダメで、uvのissueで事例を見つけた。

https://github.com/astral-sh/uv/issues/9513

具体的にはビルドで使っているsetuptoolsのバグらしい。uv側ではどうしようもないので見守るしかない。

https://github.com/pypa/setuptools/issues/4759

回避策

回避策は他のビルドツールを使うことらしく、この例ではHatchを使っていて、私もこれで成功した。

https://github.com/astral-sh/uv/issues/9513#issuecomment-2512673866

Discussion