[BE]: Add PEP621 project section to pyproject.toml (#153055)

Follow up to @ezyang's PR #153020 , but better uses PEP621 to reduce redundant fields and pass through metadata better to uv, setuptools, poetry and other tooling.

* Enables modern tooling like uv sync and better support for tools like poetry.
* Also allows us to set project wide settings that are respected by linters and IDE (in this example we are able centralize the minimum supported python version).
* Currently most of the values are dynamically fetched from setuptools, eventually we can migrate all the statically defined values to pyproject.toml and they will be autopopulated in the setuptool arguments.
* This controls what additional metadata shows up on PyPi . Special URL Names are listed here for rendering on pypi: https://packaging.python.org/en/latest/specifications/well-known-project-urls/#well-known-labels

These also clearly shows us what fields will need to be migrated to pyproject.toml over time from setup.py per #152276. Static fields be fairly easy to migrate, the dynamically built ones like requirements are a bit more challenging.

Without this, `uv sync` complains:
```
error: No `project` table found in: `pytorch/pyproject.toml`
```
Pull Request resolved: https://github.com/pytorch/pytorch/pull/153055
Approved by: https://github.com/ezyang
This commit is contained in:
Aaron Gokaslan 2025-05-08 21:27:16 +00:00 committed by PyTorch MergeBot
parent 9608e7fee9
commit 5976419c69

View File

@ -1,3 +1,27 @@
[project]
name = "torch"
requires-python = ">=3.9"
license = {text = "BSD-3-Clause"}
dynamic = [
"authors",
"classifiers",
"entry-points",
"dependencies",
"description",
"keywords",
"optional-dependencies",
"readme",
"scripts",
"version",
]
[project.urls]
Homepage = "https://pytorch.org/"
Documentation = "https://pytorch.org/docs/"
Source = "https://github.com/pytorch/pytorch"
Forum = "https://discuss.pytorch.org/"
[build-system]
requires = [
# After 75.8.2 dropped dep disttools API. Please fix
@ -18,8 +42,6 @@ build-backend = "setuptools.build_meta:__legacy__"
[tool.black]
line-length = 88
target-version = ["py38"]
[tool.isort]
src_paths = ["caffe2", "torch", "torchgen", "functorch", "test"]
@ -42,7 +64,6 @@ standard_library = ["typing_extensions"]
[tool.ruff]
target-version = "py39"
line-length = 88
src = ["caffe2", "torch", "torchgen", "functorch", "test"]