Skip to content

Commit e002b87

Browse files
authored
Merge pull request pypa#1326 from zooba/patch-1
Update Choosing a build backend section
2 parents d01a06e + 5c77471 commit e002b87

File tree

1 file changed

+34
-16
lines changed

1 file changed

+34
-16
lines changed

source/tutorials/packaging-projects.rst

Lines changed: 34 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -103,15 +103,18 @@ Creating a test directory
103103
:file:`tests/` is a placeholder for test files. Leave it empty for now.
104104

105105

106-
Creating pyproject.toml
107-
-----------------------
106+
Choosing a build backend
107+
------------------------
108+
109+
Tools like :ref:`pip` and :ref:`build` do not actually convert your sources
110+
into a :term:`distribution package <Distribution Package>` (like a wheel);
111+
that job is performed by a *build backend*. The build backend determines how
112+
your project will specify its configuration, including metadata (information
113+
about the project, for example, the name and tags that are displayed on PyPI)
114+
and input files. Build backends have different levels of functionality, such as
115+
whether they support building :term:`extension modules <Extension Module>`, and
116+
you should choose one that suits your needs and preferences.
108117

109-
.. TODO: Add an intro sentence about pyproject.toml, and a sub-heading for
110-
"Configuring build tools"
111-
112-
:file:`pyproject.toml` tells "frontend" build tools like :ref:`pip` and
113-
:ref:`build` what "backend" tool to use to create
114-
:term:`distribution packages <Distribution Package>` for your project.
115118
You can choose from a number of backends; this tutorial uses :ref:`Hatchling
116119
<hatch>` by default, but it will work identically with :ref:`setuptools`,
117120
:ref:`Flit <flit>`, :ref:`PDM <pdm>`, and others that support the ``[project]``
@@ -124,7 +127,10 @@ table for :ref:`metadata <configuring metadata>`.
124127
management, as well as building, uploading, and installing packages. This
125128
tutorial uses single-purpose tools that work independently.
126129

127-
Open :file:`pyproject.toml` and enter one of these ``[build-system]`` tables:
130+
The :file:`pyproject.toml` tells "front end" build tools like :ref:`pip` and
131+
:ref:`build` which backend to use for your project. Below are some
132+
examples for common build backends, but check your backend's own documentation
133+
for more details.
128134

129135
.. tab:: Hatchling
130136

@@ -159,14 +165,26 @@ Open :file:`pyproject.toml` and enter one of these ``[build-system]`` tables:
159165
build-backend = "pdm.backend"
160166
161167
162-
- ``requires`` is a list of packages that are needed to build your package. You
163-
don't need to install them; build frontends like :ref:`pip` will install them
164-
automatically in a temporary, isolated virtual environment for use during the
165-
build process.
166-
- ``build-backend`` is the name of the Python object that frontends will use to
167-
perform the build.
168+
The ``requires`` key is a list of packages that are needed to build your package.
169+
The frontend should install them automatically when building your package.
170+
Frontends usually run builds in isolated environments, so omitting dependencies
171+
here may cause build-time errors.
172+
This should always include your backend's package, and might have other build-time
173+
dependencies.
174+
175+
The ``build-backend`` key is the name of the Python object that frontends will use
176+
to perform the build.
177+
178+
Both of these values will be provided by the documentation for your build
179+
backend, or generated by its command line interface. There should be no need for
180+
you to customize these settings.
168181

169-
.. TODO: Add note to check the tools' documentation for the current snippet?
182+
Additional configuration of the build tool will either be in a ``tool`` section
183+
of the ``pyproject.toml``, or in a special file defined by the build tool. For
184+
example, when using ``setuptools`` as your build backend, additional configuration
185+
may be added to a ``setup.py`` or ``setup.cfg`` file, and specifying
186+
``setuptools.build_meta`` in your build allows the tools to locate and use these
187+
automatically.
170188

171189
.. _configuring metadata:
172190

0 commit comments

Comments
 (0)