[Distutils] PEP 517 - specifying build system in pyproject.toml
Steve Dower
steve.dower at python.org
Mon May 22 13:38:30 EDT 2017
On 22May2017 0803, Paul Moore wrote:
> On 22 May 2017 at 15:23, Nick Coghlan <ncoghlan at gmail.com> wrote:
>> No, that's discussed here:
>> https://www.python.org/dev/peps/pep-0517/#comparison-to-competing-proposals
>>
>> Even though PEP 517 defines a Python API for build backends to
>> implement, it still expects installation tools to wrap a subprocess
>> call around the backend invocation.
>
> OK, but is it not acceptable for the child cmdline process (owned by
> pip) to capture the backend implementation's stdout using reassignment
> of sys.stdout? I assume, from your response, that it's *not*
> acceptable to do that - but that needs to be documented somewhere.
> Specifically, that the child cmdline is not allowed to do something
> like:
>
> out = io.StringIO
> sys.stdout = out
> build_backend.hook()
> print(out.getvalue(), encoding="UTF-8")
>
> (Which would otherwise be a very simple way to get guaranteed UTF-8 as
> the encoding across the process boundary - but it does so by imposing
> basically the rules I stated on the backend).
Okay, I think I get the problem now. We expect backends to let child
subprocesses just spit out whatever *they* want onto the same stdout/stderr.
I'm really not a fan of forcing front ends to clean up that mess, and so
I'd still suggest that the backend "tool" be a script to launch the
actual tool and do the conversion to UTF-8.
Perhaps the middle ground is to specify encoding='utf-8',
errors='anything but strict' for front-ends, and well-behaved backends
should do the work to transcode when it is known to be necessary for the
tools they run. (i.e. frontends do not crash, backends have a simple
rule for avoiding loss of data).
Cheers,
Steve
More information about the Distutils-SIG
mailing list