[Distutils] Comments on PEP 426

Oscar Benjamin oscar.j.benjamin at gmail.com
Thu Sep 5 14:59:34 CEST 2013


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?

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?

> 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)?


Oscar


More information about the Distutils-SIG mailing list