org.python.pep621
PEP 621 project-metadata passthrough for pyproject.toml sync: carries the Python-only fields that have no native projectfile slot so a project regenerated from projectfile alone still round-trips pyproject.toml — readme, scripts, gui-scripts, entry-points, optional-dependencies, dynamic, and classifiers. Core name/version/deps/runtime metadata maps to reserved projectfile fields; this namespace is the ecosystem-only remainder.
- Namespace:
org.python.pep621 - Owner: projectfile.org (community-maintained)
- Status: proposed
Used by
Section titled “Used by”Illustrative fragment — not a complete projectfile document. Consumers MUST round-trip unknown namespaces even when no shape is published.
---# SPDX-FileCopyrightText: 2026 Damián Búho <damian.buho@proton.me>## SPDX-License-Identifier: CC-BY-4.0# SPDX-License-Identifier: MIT
# Shape: org.python.pep621 extension namespace# Illustrative fragment — not a complete projectfile document.# See registry.yaml for ownership and status.## PEP 621 project-metadata passthrough. Core pyproject fields (name, version,# description, dependencies, runtime python requirement) map to reserved# projectfile fields; this namespace carries the Python-only remainder so a# project regenerated from projectfile alone still round-trips pyproject.toml.# Field names mirror PEP 621 / pyproject [project] table keys.
org: python: pep621: readme: "README.md" # path or table {file, content-type, charset} scripts: {mycli: "myapp.cli:main"} # console_scripts (PEP 621 [project.scripts]) gui-scripts: {mygui: "myapp.gui:main"} # gui_scripts (PEP 621 [project.gui-scripts]) entry-points: # PEP 621 [project.entry-points.<group>] my.group: {myname: "myapp.x:Y"} optional-dependencies: # PEP 621 [project.optional-dependencies] test: ["pytest>=8", "coverage"] dynamic: ["version"] # PEP 621 dynamic fields classifiers: # PyPI trove classifiers - "Programming Language :: Python :: 3" - "License :: OSI Approved :: MIT License"[org.python.pep621]readme = "README.md"dynamic = [ "version" ]classifiers = [ "Programming Language :: Python :: 3", "License :: OSI Approved :: MIT License" ]
[org.python.pep621.scripts]mycli = "myapp.cli:main"
[org.python.pep621.gui-scripts]mygui = "myapp.gui:main"
[org.python.pep621.entry-points."my.group"]myname = "myapp.x:Y"
[org.python.pep621.optional-dependencies]test = [ "pytest>=8", "coverage" ]{ "org": { "python": { "pep621": { "readme": "README.md", "scripts": { "mycli": "myapp.cli:main" }, "gui-scripts": { "mygui": "myapp.gui:main" }, "entry-points": { "my.group": { "myname": "myapp.x:Y" } }, "optional-dependencies": { "test": [ "pytest>=8", "coverage" ] }, "dynamic": [ "version" ], "classifiers": [ "Programming Language :: Python :: 3", "License :: OSI Approved :: MIT License" ] } } }}