[Distutils] Current Python packaging status (from my point of view)

Nick Coghlan ncoghlan at gmail.com
Sun Nov 6 01:25:50 EDT 2016


On 6 November 2016 at 14:44, Robert Collins <robertc at robertcollins.net> wrote:
> On 3 November 2016 at 22:10, Nathaniel Smith <njs at pobox.com> wrote:
> ...> dnf/apt/pacman/chocolatey/whatever and make my wheel work everywhere -- and
>> that this will be an viable alternative to conda.
>
> As a distribution of sources, I think its very viable with the
> approach above: indeed we do similar things using bindep in OpenStack
> and that seems to be working out pretty well.

Right, and I guess we should also clearly distinguish between
"publisher provided binaries" and "redistributor provided binaries",
as I think a potentially good way to go long term for Linux might look
something like this:

* manylinuxN

A relatively narrow multi-distro ABI with updates driven mainly by
when old CentOS versions go EOL

We already have manylinux1, and it covers many cases, but not
everything (e.g. lxml would need to statically link libxml2, libxslt
and maybe a few other libraries to be manylinux1 compatible).

Most publishers aren't going to want to go beyond providing manylinux
binaries, since the combinatorial explosion of possibilities beyond
that point makes doing so impractical.

* linux_{arch}_{distro}_{version}

This is the scheme Nate Coraor adopted in order to migrate Galaxy
Project to using wheel files for binary caching:
https://docs.galaxyproject.org/en/master/admin/framework_dependencies.html#galaxy-pip-and-wheel

The really neat thing about that approach is that it's primarily local
config file driven:
https://docs.galaxyproject.org/en/master/admin/framework_dependencies.html#wheel-platform-compatibility

What that means is that if we decided to standardise that approach,
then conda could readily declare itself as a distinct platform in its
own right - wheels built with a conda Python install could get tagged
as conda wheels (since they might depend on external libraries from
the conda ecosystem), and folks running conda environments could
consume those wheels without needing to rebuild them. You'd also be
able to share a single wheelhouse between the system Python and conda
installs without inadvertently clobbering cached wheel files with
incompatible versions.

Being config file driven would also allow this to be extended to Mac
OS X and Windows fairly readily, where the platform ABI implicitly
defined by the python.org CPython binaries is even narrower than that
of manylinux1.

This scheme would mostly be useful in the near term for the way Galaxy
Project is using it: maintainers of a controlled environment using it
for managed caching of built artifacts that can then be installed with
pip.

However, it *might* eventually see use in another context as well:
redistributors using it to provide prebuilt venv-compatible wheel
files for their particular Python distribution.

Cheers,
Nick.

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


More information about the Distutils-SIG mailing list