|
5 | 5 | Platform compatibility tags |
6 | 6 | =========================== |
7 | 7 |
|
8 | | -The platform compatibility tagging model used for ``wheel`` distribution is |
9 | | -defined in :pep:`425`. |
| 8 | +Platform compatibility tags allow build tools to mark distributions as being |
| 9 | +compatible with specific platforms, and allows installers to understand which |
| 10 | +distributions are compatible with the system they are running on. |
| 11 | + |
| 12 | +General platform tags |
| 13 | +===================== |
| 14 | + |
| 15 | +The platform compatibility tagging model used for the ``wheel`` distribution |
| 16 | +format is defined in :pep:`425`. |
10 | 17 |
|
11 | 18 | .. _manylinux: |
12 | 19 |
|
13 | | -Manylinux tags |
14 | | -============== |
| 20 | +Platform tags for Linux platforms |
| 21 | +================================= |
| 22 | + |
| 23 | +The scheme defined in :pep:`425` is insufficient for public distribution of |
| 24 | +wheel files (and \*nix wheel files in general) to Linux platforms, due to the |
| 25 | +large ecosystem of Linux platforms and subtle differences between them. |
| 26 | + |
| 27 | +Instead, :pep:`513` defines the ``manylinux`` standard, which represents a |
| 28 | +common subset of Linux platforms, and allows building wheels tagged with the |
| 29 | +``manylinux`` platform tag which can be used across most common Linux |
| 30 | +distributions. |
| 31 | + |
| 32 | +There are multiple iterations of the ``manylinux`` specification, each |
| 33 | +representing the common subset of Linux platforms at a given point in time: |
| 34 | + |
| 35 | +* ``manylinux1`` (:pep:`513`) supports ``x86_64`` and ``i686`` |
| 36 | + architectures, and is based on a compatible Linux platform from 2007. |
| 37 | +* ``manylinux2010`` (:pep:`571`) supports ``x86_64`` and ``i686`` |
| 38 | + architectures. and updates the previous specification to be based on a |
| 39 | + compatible Linux platform from 2010 instead. |
| 40 | +* ``manylinux2014`` (:pep:`599`) adds support for a number of |
| 41 | + additional architectures (``aarch64``, ``armv7l``, ``ppc64``, ``ppc64le``, |
| 42 | + and ``s390x``) and updates the base platform to a compatible Linux platform |
| 43 | + from 2014. |
| 44 | + |
| 45 | +In general, distributions built for older versions of the specification are |
| 46 | +forwards-compatible (meaning that ``manylinux1`` distributions should continue |
| 47 | +to work on modern systems) but not backwards-compatible (meaning that |
| 48 | +``manylinux2010`` distributions are not expected to work on platforms that |
| 49 | +existed before 2010). |
| 50 | + |
| 51 | +Package maintainers should attempt to target the most compatible specification |
| 52 | +possible, with the caveat that the provided build environment for |
| 53 | +``manylinux1`` has reached end-of-life, and the build environment for |
| 54 | +``manylinux2010`` will reach end-of-life in November 2020 [#]_, meaning that |
| 55 | +these images will no longer receive security updates. |
| 56 | + |
| 57 | +Manylinux compatibility support |
| 58 | +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ |
| 59 | + |
| 60 | +.. Note:: |
| 61 | + The ``manylinux2014`` specification is relatively new and is not yet widely |
| 62 | + recognised by install tools. |
15 | 63 |
|
16 | | -The scheme defined in :pep:`425` is insufficient for public distribution |
17 | | -of Linux wheel files (and \*nix wheel files in general), so the *manylinux* |
18 | | -platform tags were defined, to allow providing wheels for many common Linux |
19 | | -distributions. See :pep:`513` for more about how this works. |
| 64 | +The following table shows the minimum versions of relevant projects to support |
| 65 | +the various ``manylinux`` standards: |
20 | 66 |
|
21 | | -* ``manylinux1`` is defined in :pep:`513`, for x86_64 and i686 architectures. |
22 | | -* ``manylinux2010`` is defined in :pep:`571`, for x86_64 and i686 architectures. |
23 | | - It is based on a platform from 2010, whereas ``manylinux1`` is based on a |
24 | | - platform from 2007. This means that ``manylinux2010`` packages are easier to |
25 | | - create, but not compatible with some older systems where ``manylinux1`` |
26 | | - packages would work. |
| 67 | +========== ============== ================= ================= |
| 68 | +Tool ``manylinux1`` ``manylinux2010`` ``manylinux2014`` |
| 69 | +========== ============== ================= ================= |
| 70 | +pip ``>=8.1.0`` ``>=19.0`` ``>=19.3`` [#]_ |
| 71 | +auditwheel ``>=1.0.0`` ``>=2.0.0`` ``>=3.0.0`` [#]_ |
| 72 | +========== ============== ================= ================= |
27 | 73 |
|
28 | | - ``manylinux2010`` is not yet widely recognised by install tools. |
| 74 | +.. [#] https://wiki.centos.org/About/Product |
| 75 | +.. [#] Not yet released. |
| 76 | +.. [#] Not yet released. |
0 commit comments