[Distutils] On vendoring binaries and headers with pypi packages

Sylvain Corlay sylvain.corlay at gmail.com
Mon May 15 13:29:15 EDT 2017


Hi,

When distributing python packages that depend on non-python components, the
typical way of doing this with general-purpose package managers (linux
distributions, conda) is to place binaries, headers, configuration and
other artefacts for these components in their respective natural locations
under the installation prefix (e.g. PREFIX/bin/, PREFIX/include/,
PREFIX/etc/,  PREFIX/share/).

Now, if I have a python package that depends on such a thing (e.g. pyzmq vs
zmq), the pypi wheel for pyzmq will vendor a binary for libzmq as package
data.

For the case of the header files, there is the distutils `install_headers`
directive, but the target directory is (typically) under
PREFIX/include/PythonX.Y, which is probably only a good choices for headers
of a C extension linked with this specific python installation.

Would it make sense, when vendoring packages packages that don't depend on
the python version in a wheel to use `data_files` instead, and target
respectively the `bin`, `include`, `etc` and `share` subdirectories of the
prefix?

Specifically, for the headers, one could do


    data_files      = [
        ('include/foobar', [list of the foobar header files])),
    ],

Note: I was just using zmq as an example.

Thanks,

Sylvain
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/distutils-sig/attachments/20170515/affca5e3/attachment.html>


More information about the Distutils-SIG mailing list