[Distutils] Provisionally accepting PEP 517's declarative build system interface

Nick Coghlan ncoghlan at gmail.com
Fri Jun 2 10:41:23 EDT 2017

On 2 June 2017 at 23:42, Thomas Kluyver <thomas at kluyver.me.uk> wrote:
> As was suggested at some point, I have added a build_sdist hook to my
> PR, with the following details:
> - A brief definition of the minimal requirements of an sdist.
>   - I have limited the definition to gzipped tarballs. Zip files also
>   work as sdists, but we're moving towards standardising on tarballs, so
>   I think it's simplest to require that of PEP-517 compliant tools.

For the sdist case, I'd prefer to leave the actual archive creation in
the hands of the frontend as far as the plugin API is concerned. That
lets us completely duck the fact that the sdist naming scheme and
exact archive format aren't formally defined anywhere, and for pip's
local build use case, we want the unpacked tree anyway.

In a lot of ways, it's closer in spirit to the wheel metadata
generation hook than it is to the wheel building hook.

> - The build_sdist hook must be defined, but may not always work (e.g. it
> may depend on a VCS)

I was going to object to this aspect, but I realised there's a clear
marker file that frontends can use to determine if they're working
with an already exported sdist tree: PKG-INFO

That means the invocation protocol for the additional hook can be:

- if PKG-INFO is present, then just copy the full contents of the
directory without invoking the backend's sdist export hook
- if PKG-INFO is *not* present, then invoke the backend's sdist export
hook to do a filtered export that at least omits any VCS bookkeeping

> - The prepare_build_files hook is optional, and in its absence,
> frontends can use build_sdist and extract the files to create a build
> directory.
> - Backends (like flit) where building an sdist has extra requirements
> should define prepare_build_files.

Having two hooks still leaves us open to "VCS -> sdist -> build tree
-> wheel" and "VCS -> build tree -> wheel" giving different answers,
and that's specifically the loophole we're aiming to close by
including this in PEP 517 rather than leaving it until later.

Instead, the flow that I think makes sense is "VCS -> sdist tree [->
sdist tree -> sdist tree -> ...] -> wheel", and the above model where
the export filtering is only used when PKG-INFO doesn't exist yet will
give us that.


Nick Coghlan   |   ncoghlan at gmail.com   |   Brisbane, Australia

More information about the Distutils-SIG mailing list