@@ -66,36 +66,43 @@ Build backends
6666Popular :term: `build backends <build backend> ` for pure-Python packages include,
6767in alphabetical order:
6868
69- - Flit-core _ ( developed with but separate from :ref: `Flit `). It is meant to be a
70- minimal and opinionated build backend. It is not extensible .
69+ - Flit-core _ -- developed with but separate from :ref: `Flit `. A minimal and
70+ opinionated build backend. It does not support plugins .
7171
72- - Hatchling _, which is developed along with :ref: `Hatch `, but is separate and can
73- be used without Hatch. Hatchling is extensible through a plugin system.
72+ - Hatchling _ -- developed with but separate from :ref: `Hatch `. Supports plugins.
7473
75- - PDM-backend _ (developed with but separate from :ref: `PDM `). It provides build
76- hooks for extensibility.
74+ - PDM-backend _ -- developed with but separate from :ref: `PDM `. Supports plugins.
7775
78- - Poetry-core _ ( developed with but separate from :ref: `Poetry `). It is extensible
79- through plugins.
76+ - Poetry-core _ -- developed with but separate from :ref: `Poetry `. Supports
77+ plugins.
8078
81- - :ref: `setuptools ` (which used to be the only build backend). It can be
82- configured using modern standards like the :ref: `[project] table in
83- pyproject.toml <writing-pyproject-toml>`, but can also be extended and
84- customized via :file: `setup.py `.
79+ Unlike other backends on this list, Poetry-core does not support the standard
80+ :ref: `[project] table <writing-pyproject-toml >` (it uses a different format,
81+ in the ``[tool.poetry] `` table).
82+
83+ - :ref: `setuptools `, which used to be the only build backend. Supports plugins.
8584
8685 If you use setuptools, please be aware that some features that predate
87- standardisation efforts are now deprecated and only *temporarily kept * for compatibility.
88- For example, do **not ** use ``python setup.py `` invocations
89- (cf. :ref: `setup-py-deprecated `), the ``setup_requires `` argument to
90- ``setup() `` (use the :ref: `[build-system] table
91- <pyproject-guide-build-system-table>` of :file: `pyproject.toml ` instead), or
86+ standardisation efforts are now deprecated and only *temporarily kept *
87+ for compatibility.
88+
89+ In particular, do **not ** use direct ``python setup.py `` invocations. On the
90+ other hand, configuring setuptools with a :file: `setup.py ` file is still fully
91+ supported, although it is recommended to use the modern :ref: `[project] table
92+ in pyproject.toml <writing-pyproject-toml>` whenever possible and keep
93+ :file: `setup.py ` only if programmatic configuration is needed. See
94+ :ref: `setup-py-deprecated `.
95+
96+ Other examples of deprecated features you should **not ** use include the
97+ ``setup_requires `` argument to ``setup() `` (use the :ref: `[build-system] table
98+ <pyproject-guide-build-system-table>` in :file: `pyproject.toml ` instead), and
9299 the ``easy_install `` command (cf. :ref: `pip vs easy_install `).
93100
94101Do **not ** use :ref: `distutils `, which is deprecated, and has been removed from
95102the standard library in Python 3.12, although it still remains available from
96103setuptools.
97104
98- For packages with :term: `extension modules <extension module> `, you may use
105+ For packages with :term: `extension modules <extension module> `, it is best to use
99106a build system with dedicated support for the language the extension is written in,
100107for example:
101108
0 commit comments