Skip to content

Commit 228d3e9

Browse files
committed
Disable abi3 wheel tag for PyPy
Pip does not support installing PyPy wheels with the abi3 tag. If you build a wheel for PyPy and set the ABI tag to `abi3`, pip will not be able to install it. ``` $ docker run --rm -it quay.io/pypa/manylinux2014_x86_64 [root@cd7b2d465170 /]# /opt/python/pp39-pypy39_pp73/bin/python Python 3.9.19 (a2113ea87262, Apr 21 2024, 05:40:24) [PyPy 7.3.16 with GCC 10.2.1 20210130 (Red Hat 10.2.1-11)] on linux Type "help", "copyright", "credits" or "license" for more information. >>>> from pip._internal.utils.compatibility_tags import get_supported >>>> for tag in get_supported(): .... print(tag) .... pp39-pypy39_pp73-manylinux_2_17_x86_64 pp39-pypy39_pp73-manylinux2014_x86_64 pp39-pypy39_pp73-manylinux_2_16_x86_64 pp39-pypy39_pp73-manylinux_2_15_x86_64 pp39-pypy39_pp73-manylinux_2_14_x86_64 pp39-pypy39_pp73-manylinux_2_13_x86_64 pp39-pypy39_pp73-manylinux_2_12_x86_64 pp39-pypy39_pp73-manylinux2010_x86_64 pp39-pypy39_pp73-manylinux_2_11_x86_64 pp39-pypy39_pp73-manylinux_2_10_x86_64 pp39-pypy39_pp73-manylinux_2_9_x86_64 pp39-pypy39_pp73-manylinux_2_8_x86_64 pp39-pypy39_pp73-manylinux_2_7_x86_64 pp39-pypy39_pp73-manylinux_2_6_x86_64 pp39-pypy39_pp73-manylinux_2_5_x86_64 pp39-pypy39_pp73-manylinux1_x86_64 pp39-pypy39_pp73-linux_x86_64 pp39-none-manylinux_2_17_x86_64 pp39-none-manylinux2014_x86_64 pp39-none-manylinux_2_16_x86_64 pp39-none-manylinux_2_15_x86_64 pp39-none-manylinux_2_14_x86_64 pp39-none-manylinux_2_13_x86_64 pp39-none-manylinux_2_12_x86_64 pp39-none-manylinux2010_x86_64 pp39-none-manylinux_2_11_x86_64 pp39-none-manylinux_2_10_x86_64 pp39-none-manylinux_2_9_x86_64 pp39-none-manylinux_2_8_x86_64 pp39-none-manylinux_2_7_x86_64 pp39-none-manylinux_2_6_x86_64 pp39-none-manylinux_2_5_x86_64 pp39-none-manylinux1_x86_64 pp39-none-linux_x86_64 py39-none-manylinux_2_17_x86_64 py39-none-manylinux2014_x86_64 py39-none-manylinux_2_16_x86_64 py39-none-manylinux_2_15_x86_64 py39-none-manylinux_2_14_x86_64 py39-none-manylinux_2_13_x86_64 py39-none-manylinux_2_12_x86_64 py39-none-manylinux2010_x86_64 py39-none-manylinux_2_11_x86_64 py39-none-manylinux_2_10_x86_64 py39-none-manylinux_2_9_x86_64 py39-none-manylinux_2_8_x86_64 py39-none-manylinux_2_7_x86_64 py39-none-manylinux_2_6_x86_64 py39-none-manylinux_2_5_x86_64 py39-none-manylinux1_x86_64 py39-none-linux_x86_64 py3-none-manylinux_2_17_x86_64 py3-none-manylinux2014_x86_64 py3-none-manylinux_2_16_x86_64 py3-none-manylinux_2_15_x86_64 py3-none-manylinux_2_14_x86_64 py3-none-manylinux_2_13_x86_64 py3-none-manylinux_2_12_x86_64 py3-none-manylinux2010_x86_64 py3-none-manylinux_2_11_x86_64 py3-none-manylinux_2_10_x86_64 py3-none-manylinux_2_9_x86_64 py3-none-manylinux_2_8_x86_64 py3-none-manylinux_2_7_x86_64 py3-none-manylinux_2_6_x86_64 py3-none-manylinux_2_5_x86_64 py3-none-manylinux1_x86_64 py3-none-linux_x86_64 py38-none-manylinux_2_17_x86_64 py38-none-manylinux2014_x86_64 py38-none-manylinux_2_16_x86_64 py38-none-manylinux_2_15_x86_64 py38-none-manylinux_2_14_x86_64 py38-none-manylinux_2_13_x86_64 py38-none-manylinux_2_12_x86_64 py38-none-manylinux2010_x86_64 py38-none-manylinux_2_11_x86_64 py38-none-manylinux_2_10_x86_64 py38-none-manylinux_2_9_x86_64 py38-none-manylinux_2_8_x86_64 py38-none-manylinux_2_7_x86_64 py38-none-manylinux_2_6_x86_64 py38-none-manylinux_2_5_x86_64 py38-none-manylinux1_x86_64 py38-none-linux_x86_64 py37-none-manylinux_2_17_x86_64 py37-none-manylinux2014_x86_64 py37-none-manylinux_2_16_x86_64 py37-none-manylinux_2_15_x86_64 py37-none-manylinux_2_14_x86_64 py37-none-manylinux_2_13_x86_64 py37-none-manylinux_2_12_x86_64 py37-none-manylinux2010_x86_64 py37-none-manylinux_2_11_x86_64 py37-none-manylinux_2_10_x86_64 py37-none-manylinux_2_9_x86_64 py37-none-manylinux_2_8_x86_64 py37-none-manylinux_2_7_x86_64 py37-none-manylinux_2_6_x86_64 py37-none-manylinux_2_5_x86_64 py37-none-manylinux1_x86_64 py37-none-linux_x86_64 py36-none-manylinux_2_17_x86_64 py36-none-manylinux2014_x86_64 py36-none-manylinux_2_16_x86_64 py36-none-manylinux_2_15_x86_64 py36-none-manylinux_2_14_x86_64 py36-none-manylinux_2_13_x86_64 py36-none-manylinux_2_12_x86_64 py36-none-manylinux2010_x86_64 py36-none-manylinux_2_11_x86_64 py36-none-manylinux_2_10_x86_64 py36-none-manylinux_2_9_x86_64 py36-none-manylinux_2_8_x86_64 py36-none-manylinux_2_7_x86_64 py36-none-manylinux_2_6_x86_64 py36-none-manylinux_2_5_x86_64 py36-none-manylinux1_x86_64 py36-none-linux_x86_64 py35-none-manylinux_2_17_x86_64 py35-none-manylinux2014_x86_64 py35-none-manylinux_2_16_x86_64 py35-none-manylinux_2_15_x86_64 py35-none-manylinux_2_14_x86_64 py35-none-manylinux_2_13_x86_64 py35-none-manylinux_2_12_x86_64 py35-none-manylinux2010_x86_64 py35-none-manylinux_2_11_x86_64 py35-none-manylinux_2_10_x86_64 py35-none-manylinux_2_9_x86_64 py35-none-manylinux_2_8_x86_64 py35-none-manylinux_2_7_x86_64 py35-none-manylinux_2_6_x86_64 py35-none-manylinux_2_5_x86_64 py35-none-manylinux1_x86_64 py35-none-linux_x86_64 py34-none-manylinux_2_17_x86_64 py34-none-manylinux2014_x86_64 py34-none-manylinux_2_16_x86_64 py34-none-manylinux_2_15_x86_64 py34-none-manylinux_2_14_x86_64 py34-none-manylinux_2_13_x86_64 py34-none-manylinux_2_12_x86_64 py34-none-manylinux2010_x86_64 py34-none-manylinux_2_11_x86_64 py34-none-manylinux_2_10_x86_64 py34-none-manylinux_2_9_x86_64 py34-none-manylinux_2_8_x86_64 py34-none-manylinux_2_7_x86_64 py34-none-manylinux_2_6_x86_64 py34-none-manylinux_2_5_x86_64 py34-none-manylinux1_x86_64 py34-none-linux_x86_64 py33-none-manylinux_2_17_x86_64 py33-none-manylinux2014_x86_64 py33-none-manylinux_2_16_x86_64 py33-none-manylinux_2_15_x86_64 py33-none-manylinux_2_14_x86_64 py33-none-manylinux_2_13_x86_64 py33-none-manylinux_2_12_x86_64 py33-none-manylinux2010_x86_64 py33-none-manylinux_2_11_x86_64 py33-none-manylinux_2_10_x86_64 py33-none-manylinux_2_9_x86_64 py33-none-manylinux_2_8_x86_64 py33-none-manylinux_2_7_x86_64 py33-none-manylinux_2_6_x86_64 py33-none-manylinux_2_5_x86_64 py33-none-manylinux1_x86_64 py33-none-linux_x86_64 py32-none-manylinux_2_17_x86_64 py32-none-manylinux2014_x86_64 py32-none-manylinux_2_16_x86_64 py32-none-manylinux_2_15_x86_64 py32-none-manylinux_2_14_x86_64 py32-none-manylinux_2_13_x86_64 py32-none-manylinux_2_12_x86_64 py32-none-manylinux2010_x86_64 py32-none-manylinux_2_11_x86_64 py32-none-manylinux_2_10_x86_64 py32-none-manylinux_2_9_x86_64 py32-none-manylinux_2_8_x86_64 py32-none-manylinux_2_7_x86_64 py32-none-manylinux_2_6_x86_64 py32-none-manylinux_2_5_x86_64 py32-none-manylinux1_x86_64 py32-none-linux_x86_64 py31-none-manylinux_2_17_x86_64 py31-none-manylinux2014_x86_64 py31-none-manylinux_2_16_x86_64 py31-none-manylinux_2_15_x86_64 py31-none-manylinux_2_14_x86_64 py31-none-manylinux_2_13_x86_64 py31-none-manylinux_2_12_x86_64 py31-none-manylinux2010_x86_64 py31-none-manylinux_2_11_x86_64 py31-none-manylinux_2_10_x86_64 py31-none-manylinux_2_9_x86_64 py31-none-manylinux_2_8_x86_64 py31-none-manylinux_2_7_x86_64 py31-none-manylinux_2_6_x86_64 py31-none-manylinux_2_5_x86_64 py31-none-manylinux1_x86_64 py31-none-linux_x86_64 py30-none-manylinux_2_17_x86_64 py30-none-manylinux2014_x86_64 py30-none-manylinux_2_16_x86_64 py30-none-manylinux_2_15_x86_64 py30-none-manylinux_2_14_x86_64 py30-none-manylinux_2_13_x86_64 py30-none-manylinux_2_12_x86_64 py30-none-manylinux2010_x86_64 py30-none-manylinux_2_11_x86_64 py30-none-manylinux_2_10_x86_64 py30-none-manylinux_2_9_x86_64 py30-none-manylinux_2_8_x86_64 py30-none-manylinux_2_7_x86_64 py30-none-manylinux_2_6_x86_64 py30-none-manylinux_2_5_x86_64 py30-none-manylinux1_x86_64 py30-none-linux_x86_64 pp39-none-any py39-none-any py3-none-any py38-none-any py37-none-any py36-none-any py35-none-any py34-none-any py33-none-any py32-none-any py31-none-any py30-none-any ```
1 parent 09cfd8e commit 228d3e9

File tree

1 file changed

+16
-16
lines changed

1 file changed

+16
-16
lines changed

Diff for: mesonpy/__init__.py

+16-16
Original file line numberDiff line numberDiff line change
@@ -406,22 +406,22 @@ def entrypoints_txt(self) -> bytes:
406406

407407
@cached_property
408408
def _stable_abi(self) -> Optional[str]:
409-
if self._limited_api:
410-
# PyPy does not use a special extension module filename
411-
# suffix for modules targeting the stable API.
412-
if '__pypy__' not in sys.builtin_module_names:
413-
# Verify stable ABI compatibility: examine files installed
414-
# in {platlib} that look like extension modules, and raise
415-
# an exception if any of them has a Python version
416-
# specific extension filename suffix ABI tag.
417-
for path, _ in self._manifest['platlib']:
418-
match = _EXTENSION_SUFFIX_REGEX.match(path.name)
419-
if match:
420-
abi = match.group('abi')
421-
if abi is not None and abi != 'abi3':
422-
raise BuildError(
423-
f'The package declares compatibility with Python limited API but extension '
424-
f'module {os.fspath(path)!r} is tagged for a specific Python version.')
409+
# PyPy does not use a special extension module filename
410+
# suffix for modules targeting the stable API, and pip does not
411+
# support installing wheels with the abi3 tag.
412+
if self._limited_api and '__pypy__' not in sys.builtin_module_names:
413+
# Verify stable ABI compatibility: examine files installed
414+
# in {platlib} that look like extension modules, and raise
415+
# an exception if any of them has a Python version
416+
# specific extension filename suffix ABI tag.
417+
for path, _ in self._manifest['platlib']:
418+
match = _EXTENSION_SUFFIX_REGEX.match(path.name)
419+
if match:
420+
abi = match.group('abi')
421+
if abi is not None and abi != 'abi3':
422+
raise BuildError(
423+
f'The package declares compatibility with Python limited API but extension '
424+
f'module {os.fspath(path)!r} is tagged for a specific Python version.')
425425
return 'abi3'
426426
return None
427427

0 commit comments

Comments
 (0)