The basic installation format for users who install packages via pip
is
the wheel format. Wheel names are composed of four parts: a
package-name-and-version tag (which can be further broken down), a Python tag,
an ABI tag, and a platform tag. More information on the tags can be found in
PEP 425. So a package like NumPy
will be available on PyPI as numpy-1.19.2-cp36-cp36m-win_amd64.whl
for 64-bit
windows and numpy-1.19.2-cp36-cp36m-macosx_10_9_x86_64.whl
for macOS. Note
that only the plaform tag win_amd64
or macosx_10_9_x86_64
differs.
But what about Linux? There is no single, vendor controlled, "Linux platform"
e.g., Ubuntu, RedHat, Fedora, Debian, FreeBSD all package software at slightly
different versions. What most Linux distributions do have in common is the
glibc runtime library, and a smattering of various additional system libraries.
So it is possible to define a least common denominator (LCD) of software
expected to be on a Linux platform (exceptions apply, e.g. non-glibc
distributions).
The decision to converge on a LCD common platform gave birth to the
manylinux1 standard. Going back
to our example, numpy is available as
numpy-1.19.2-cp36-cp36m-manylinux1_x86_64.whl
.
The first manylinux standard, manylinux1, was based on CentOS5 which has been
obsolete since
March 2017. The subsequent manylinux2010 standard is based on CentOS6, which
will hit end-of-life in December 2020. The manylinux2014 standard still has some
breathing room. Based on CentOS7, it will reach end-of-life in July 2024.
So what is next for manylinux
, and what manylinux
should users and package
maintainers use?
Read more…