|
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 | +The platform compatibility tagging model used for the ``wheel`` distribution |
| 13 | +format is defined in :pep:`425`. |
| 14 | + |
| 15 | +Platform tags for Windows |
| 16 | +------------------------- |
| 17 | + |
| 18 | +The scheme defined in :pep:`425` covers public distribution of wheel files to |
| 19 | +systems running Windows. |
| 20 | + |
| 21 | +Platform tags for macOS (Mac OS X) |
| 22 | +---------------------------------- |
| 23 | + |
| 24 | +The scheme defined in :pep:`425` covers public distribution of wheel files to |
| 25 | +systems running macOS (previously known as Mac OS X). |
| 26 | + |
| 27 | +Platform tags for common Linux distributions |
| 28 | +-------------------------------------------- |
10 | 29 |
|
11 | 30 | .. _manylinux:
|
12 | 31 |
|
13 |
| -Manylinux tags |
14 |
| -============== |
| 32 | +The scheme defined in :pep:`425` is insufficient for public distribution of |
| 33 | +wheel files (and \*nix wheel files in general) to Linux platforms, due to the |
| 34 | +large ecosystem of Linux platforms and subtle differences between them. |
| 35 | + |
| 36 | +Instead, :pep:`513` defines the ``manylinux`` standard, which represents a |
| 37 | +common subset of Linux platforms, and allows building wheels tagged with the |
| 38 | +``manylinux`` platform tag which can be used across most common Linux |
| 39 | +distributions. |
| 40 | + |
| 41 | +There are multiple iterations of the ``manylinux`` specification, each |
| 42 | +representing the common subset of Linux platforms at a given point in time: |
| 43 | + |
| 44 | +* ``manylinux1`` (:pep:`513`) supports ``x86_64`` and ``i686`` |
| 45 | + architectures, and is based on a compatible Linux platform from 2007. |
| 46 | +* ``manylinux2010`` (:pep:`571`) supports ``x86_64`` and ``i686`` |
| 47 | + architectures. and updates the previous specification to be based on a |
| 48 | + compatible Linux platform from 2010 instead. |
| 49 | +* ``manylinux2014`` (:pep:`599`) adds support for a number of |
| 50 | + additional architectures (``aarch64``, ``armv7l``, ``ppc64``, ``ppc64le``, |
| 51 | + and ``s390x``) and updates the base platform to a compatible Linux platform |
| 52 | + from 2014. |
| 53 | + |
| 54 | +In general, distributions built for older versions of the specification are |
| 55 | +forwards-compatible (meaning that ``manylinux1`` distributions should continue |
| 56 | +to work on modern systems) but not backwards-compatible (meaning that |
| 57 | +``manylinux2010`` distributions are not expected to work on platforms that |
| 58 | +existed before 2010). |
| 59 | + |
| 60 | +Package maintainers should attempt to target the most compatible specification |
| 61 | +possible, with the caveat that the provided build environment for |
| 62 | +``manylinux1`` has reached end-of-life, and the build environment for |
| 63 | +``manylinux2010`` will reach end-of-life in November 2020 [#]_, meaning that |
| 64 | +these images will no longer receive security updates. |
| 65 | + |
| 66 | +Manylinux compatibility support |
| 67 | +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ |
| 68 | + |
| 69 | +.. Note:: |
| 70 | + The ``manylinux2014`` specification is relatively new and is not yet widely |
| 71 | + recognised by install tools. |
| 72 | + |
| 73 | +The following table shows the minimum versions of relevant projects to support |
| 74 | +the various ``manylinux`` standards: |
| 75 | + |
| 76 | +========== ============== ================= ================= |
| 77 | +Tool ``manylinux1`` ``manylinux2010`` ``manylinux2014`` |
| 78 | +========== ============== ================= ================= |
| 79 | +pip ``>=8.1.0`` ``>=19.0`` ``>=19.3`` [#]_ |
| 80 | +auditwheel ``>=1.0.0`` ``>=2.0.0`` ``>=3.0.0`` [#]_ |
| 81 | +========== ============== ================= ================= |
| 82 | + |
| 83 | +Platform tags for other \*nix platforms |
| 84 | +--------------------------------------- |
15 | 85 |
|
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. |
| 86 | +The scheme defined in :pep:`425` is not generally sufficient for public |
| 87 | +distribution of wheel files to other \*nix platforms. Efforts are currently |
| 88 | +(albeit intermittently) under way to define improved compatibility tagging |
| 89 | +schemes for AIX and for Alpine Linux. |
20 | 90 |
|
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. |
27 | 91 |
|
28 |
| - ``manylinux2010`` is not yet widely recognised by install tools. |
| 92 | +.. [#] https://wiki.centos.org/About/Product |
| 93 | +.. [#] Not yet released. |
| 94 | +.. [#] Not yet released. |
0 commit comments