[Distutils] Finishing up PEP 517

Nathaniel Smith njs at pobox.com
Thu Jun 15 16:43:03 EDT 2017

On Thu, Jun 15, 2017 at 6:12 AM, Thomas Kluyver <thomas at kluyver.me.uk> wrote:
> Yes, it's PEP 517 again! Here's the current text:
> https://www.python.org/dev/peps/pep-0517/
> We currently say:
>> All other hooks [except get_build_requires] are executed in an environment which contains both the bootstrap requirements specified in the pyproject.toml hook and those specified by the get_build_requires hook.
> It's not clear to me whether this should be required for the build_sdist
> and prepare_build_files hooks, nor whether there are any adverse
> consequences of specifying it like this anyway. Thoughts?

I think we should rename get_build_requires to
get_build_wheel_requires, and add a get_build_sdist_requires. And the
rule would be:

get_build_sdist_requires: can assume build-system.requires are available
get_build_wheel_requires: can assume build-system.requires are available

build_sdist: can assume build-system.requires and
get_build_sdist_requires are available
prepare_wheel_metadata, build_wheel: can assume build-system.requires
and get_build_wheel_requires are available

Rationale: (a) conceptually the sdist and wheel phases are totally
separate, so we shouldn't couple them by requiring a single hook to
provide the union of requirements for both. (b) there are known cases
where building an sdist has different requirements than building a
wheel. Examples: packages that run cython at sdist generation time.
(This is not *as* necessary if we have robust build-time requirement
support, but that's only one of the motivations for projects to do
this now; others include avoiding a potentially expensive step for
users -- installing cython in slow -- and avoiding the risk of later
cython changes breaking an existing release.) In the broader world,
it's very common to run automake/autotools etc. to generate
./configure scripts at sdist generation time. Maybe a python web app
needs node installed to run its asset pipeline so they do that at
sdist generation time rather than forcing end-users to install node.

It's not immediately obvious to me how prepare_build_files would fit
into this; if it's only supposed to be used for building from an
sdist, then it's like an extra half-phase in between the sdist and
wheel phases -- maybe it's more part of the wheel phase and should get
the wheel requirements? Is that the only time it's used? I guess I'll
wait to worry about it until after I see how people respond to my
argument in the other thread that prepare_build_files shouldn't exist
at all :-).


Nathaniel J. Smith -- https://vorpus.org

More information about the Distutils-SIG mailing list