[Distutils] Comments on PEP 426

Daniel Holth dholth at gmail.com
Thu Sep 5 15:15:45 CEST 2013


On Thu, Sep 5, 2013 at 8:59 AM, Oscar Benjamin
<oscar.j.benjamin at gmail.com> wrote:
> On 5 September 2013 13:34, Daniel Holth <dholth at gmail.com> wrote:
>> On Thu, Sep 5, 2013 at 5:36 AM, Oscar Benjamin
>> <oscar.j.benjamin at gmail.com> wrote:
>>
>> --single-version-externally-managed just means "install everything
>> into a flat site-packages" rather than installing them into their own
>> (egg) directories.
>
> Does that mean that the option could be safely ignored by distutils?

Probably.

> Obviously if X has a vanilla distutils setup.py then this is what
> 'python setup.py install' would do anyway. Or is it possible that X
> could be installed as a dependency of Y that uses setuptools in such a
> way that this option wouldn't get passed to X's setup.py install
> command? In that case presumably pip would expect the 'setup.py
> install' command to do something different.
>
>> If you would like to advance the state of the art of distutils you
>> should consider implementing a dist-info command that builds a
>> dist-info directory instead of an egg-info directory [it's possible
>> pip will recognize this automatically if it uses pkg_resources to
>> inspect the dependencies].
>
> Pip only checks for the '.egg-info' extension so it won't pick up any
> PEP 376 metadata files:
> https://github.com/pypa/pip/blob/develop/pip/req.py#L646
>
>> You could also try for a bdist_wheel
>> feature -- Vinay's distil has shown how this can be done with the
>> install command by passing --install-platlib=x etc. as per the wheel
>> layout, by converting egg-info to dist-info, by adding a manifest, and
>> zipping the result.
>
> I was really just trying to identify what is the minimum required to
> work right now. Does pip or anything else ever use bdist_wheel during
> installation from sdist?

Just the two part 'pip wheel'; 'install the new wheels' workflow.

>> In setuptools you can just write the new command plugins once as an
>> add-on package and have them available in every sdist.
>>
>> You might also look into supporting installs by an installer without
>> running the hated setup.py install command. The installer could always
>> generate an intermediate wheel, or it could avoid some of the (usually
>> very fast) copying by defining and generating a manifest of category
>> -> [{source path : destination path relative to the scheme}, ...] as
>> in "purelib" : [ { "src/__init__.py" -> "__init__.py'"}, ...]; the
>> installer would be able to interpret the manifest in much the same way
>> as a wheel package.
>
> Apart from uploading wheels to PyPI how can you support installation
> with pip without 'python setup.py install' (or 'python setup.py
> bdist_egg' for easy_install)?

pip will have to be updated but this is the direction we need to go.
setup.py needs to be the build script and the installer needs to do
the installs. That decoupling is also the main idea behind the wheel
format.


More information about the Distutils-SIG mailing list