From cf62f7f89a6a96321b07e1646b0d757848e10ea4 Mon Sep 17 00:00:00 2001 From: Hood Chatham Date: Tue, 21 May 2024 07:48:46 -0400 Subject: [PATCH 1/6] Add Pyodide compatibility We are changing our wheel platform tag to pyodide_2024_0 so we need to teach packaging to map Emscripten platform to this. --- src/packaging/tags.py | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/src/packaging/tags.py b/src/packaging/tags.py index 6667d2990..1c6d07aa6 100644 --- a/src/packaging/tags.py +++ b/src/packaging/tags.py @@ -502,6 +502,13 @@ def _linux_platforms(is_32bit: bool = _32_BIT_INTERPRETER) -> Iterator[str]: yield f"linux_{arch}" +def _emscripten_platforms() -> Iterator[str]: + pyodide_abi_version = sysconfig.get_config_var("PYODIDE_ABI_VERSION") + if pyodide_abi_version: + yield f"pyodide_{pyodide_abi_version}_wasm32" + yield from _generic_platforms() + + def _generic_platforms() -> Iterator[str]: yield _normalize_string(sysconfig.get_platform()) @@ -514,6 +521,8 @@ def platform_tags() -> Iterator[str]: return mac_platforms() elif platform.system() == "Linux": return _linux_platforms() + elif platform.system() == "Emscripten": + return _emscripten_platforms() else: return _generic_platforms() From 5d5b76dc9a9faa49d36768d4abdcf667a291f888 Mon Sep 17 00:00:00 2001 From: Hood Chatham Date: Mon, 17 Jun 2024 16:22:44 -0700 Subject: [PATCH 2/6] Add tests --- tests/test_tags.py | 38 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) diff --git a/tests/test_tags.py b/tests/test_tags.py index 9821fc254..065b98b6b 100644 --- a/tests/test_tags.py +++ b/tests/test_tags.py @@ -1364,6 +1364,44 @@ def test_cpython_first_none_any_tag(self, monkeypatch): interpreter = f"cp{tags.interpreter_version()}" assert tag == tags.Tag(interpreter, "none", "any") + def test_emscripten(self, mock_interpreter_name, monkeypatch): + expected_interpreter = "cp" + tags._version_nodot(sys.version_info[:2]) + if mock_interpreter_name("CPython"): + monkeypatch.setattr( + tags, "_cpython_abis", lambda _1, _2: [expected_interpreter] + ) + monkeypatch.setattr(platform, "system", lambda: "Emscripten") + monkeypatch.setattr( + sysconfig, "get_platform", lambda: "emscripten-3.1.58-wasm32" + ) + assert list(tags.platform_tags()) == ["emscripten_3_1_58_wasm32"] + result = list(tags.sys_tags()) + assert result[0] == tags.Tag( + expected_interpreter, "cp312", "emscripten_3_1_58_wasm32" + ) + + def test_pyodide(self, mock_interpreter_name, monkeypatch): + expected_interpreter = "cp" + tags._version_nodot(sys.version_info[:2]) + monkeypatch.setitem( + sysconfig.get_config_vars(), "PYODIDE_ABI_VERSION", "2024_0" + ) + if mock_interpreter_name("CPython"): + monkeypatch.setattr( + tags, "_cpython_abis", lambda _1, _2: [expected_interpreter] + ) + monkeypatch.setattr(platform, "system", lambda: "Emscripten") + monkeypatch.setattr( + sysconfig, "get_platform", lambda: "emscripten-3.1.58-wasm32" + ) + assert list(tags.platform_tags()) == [ + "pyodide_2024_0_wasm32", + "emscripten_3_1_58_wasm32", + ] + result = list(tags.sys_tags()) + assert result[0] == tags.Tag( + expected_interpreter, "cp312", "pyodide_2024_0_wasm32" + ) + class TestBitness: def teardown_method(self): From ee80f3a4a0bab93b0cbc082e44c74e98aceaff22 Mon Sep 17 00:00:00 2001 From: Hood Chatham Date: Wed, 19 Mar 2025 15:25:56 +0100 Subject: [PATCH 3/6] Fix tests --- tests/test_tags.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/test_tags.py b/tests/test_tags.py index dd19b0a98..f984bb740 100644 --- a/tests/test_tags.py +++ b/tests/test_tags.py @@ -1478,7 +1478,7 @@ def test_emscripten(self, mock_interpreter_name, monkeypatch): assert list(tags.platform_tags()) == ["emscripten_3_1_58_wasm32"] result = list(tags.sys_tags()) assert result[0] == tags.Tag( - expected_interpreter, "cp312", "emscripten_3_1_58_wasm32" + expected_interpreter, expected_interpreter, "emscripten_3_1_58_wasm32" ) def test_pyodide(self, mock_interpreter_name, monkeypatch): @@ -1500,7 +1500,7 @@ def test_pyodide(self, mock_interpreter_name, monkeypatch): ] result = list(tags.sys_tags()) assert result[0] == tags.Tag( - expected_interpreter, "cp312", "pyodide_2024_0_wasm32" + expected_interpreter, expected_interpreter, "pyodide_2024_0_wasm32" ) From c42b2a1c0c250d8f297bde5562b6b027a24ccb2f Mon Sep 17 00:00:00 2001 From: Hood Chatham Date: Tue, 3 Mar 2026 12:11:35 +0100 Subject: [PATCH 4/6] Update tests --- tests/test_tags.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/tests/test_tags.py b/tests/test_tags.py index f984bb740..86590d027 100644 --- a/tests/test_tags.py +++ b/tests/test_tags.py @@ -1484,7 +1484,7 @@ def test_emscripten(self, mock_interpreter_name, monkeypatch): def test_pyodide(self, mock_interpreter_name, monkeypatch): expected_interpreter = "cp" + tags._version_nodot(sys.version_info[:2]) monkeypatch.setitem( - sysconfig.get_config_vars(), "PYODIDE_ABI_VERSION", "2024_0" + sysconfig.get_config_vars(), "PYODIDE_ABI_VERSION", "312_0" ) if mock_interpreter_name("CPython"): monkeypatch.setattr( @@ -1495,12 +1495,12 @@ def test_pyodide(self, mock_interpreter_name, monkeypatch): sysconfig, "get_platform", lambda: "emscripten-3.1.58-wasm32" ) assert list(tags.platform_tags()) == [ - "pyodide_2024_0_wasm32", + "pyodide_312_0_wasm32", "emscripten_3_1_58_wasm32", ] result = list(tags.sys_tags()) assert result[0] == tags.Tag( - expected_interpreter, expected_interpreter, "pyodide_2024_0_wasm32" + expected_interpreter, expected_interpreter, "pyodide_312_0_wasm32" ) From 463169792b8e0303cd16a8c3a6de34940885e487 Mon Sep 17 00:00:00 2001 From: Hood Chatham Date: Tue, 3 Mar 2026 13:45:28 +0100 Subject: [PATCH 5/6] Revert "Update tests" This reverts commit c42b2a1c0c250d8f297bde5562b6b027a24ccb2f. --- tests/test_tags.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/tests/test_tags.py b/tests/test_tags.py index 86590d027..f984bb740 100644 --- a/tests/test_tags.py +++ b/tests/test_tags.py @@ -1484,7 +1484,7 @@ def test_emscripten(self, mock_interpreter_name, monkeypatch): def test_pyodide(self, mock_interpreter_name, monkeypatch): expected_interpreter = "cp" + tags._version_nodot(sys.version_info[:2]) monkeypatch.setitem( - sysconfig.get_config_vars(), "PYODIDE_ABI_VERSION", "312_0" + sysconfig.get_config_vars(), "PYODIDE_ABI_VERSION", "2024_0" ) if mock_interpreter_name("CPython"): monkeypatch.setattr( @@ -1495,12 +1495,12 @@ def test_pyodide(self, mock_interpreter_name, monkeypatch): sysconfig, "get_platform", lambda: "emscripten-3.1.58-wasm32" ) assert list(tags.platform_tags()) == [ - "pyodide_312_0_wasm32", + "pyodide_2024_0_wasm32", "emscripten_3_1_58_wasm32", ] result = list(tags.sys_tags()) assert result[0] == tags.Tag( - expected_interpreter, expected_interpreter, "pyodide_312_0_wasm32" + expected_interpreter, expected_interpreter, "pyodide_2024_0_wasm32" ) From 78684df327c109bc96de0949df9b22463f959e3c Mon Sep 17 00:00:00 2001 From: Hood Chatham Date: Tue, 3 Mar 2026 13:46:24 +0100 Subject: [PATCH 6/6] Switch from pyodide to pyemscripten --- src/packaging/tags.py | 6 +++--- tests/test_tags.py | 8 ++++---- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/src/packaging/tags.py b/src/packaging/tags.py index 488545f0f..21e6e560a 100644 --- a/src/packaging/tags.py +++ b/src/packaging/tags.py @@ -550,9 +550,9 @@ def _linux_platforms(is_32bit: bool = _32_BIT_INTERPRETER) -> Iterator[str]: def _emscripten_platforms() -> Iterator[str]: - pyodide_abi_version = sysconfig.get_config_var("PYODIDE_ABI_VERSION") - if pyodide_abi_version: - yield f"pyodide_{pyodide_abi_version}_wasm32" + pyemscripten_abi_version = sysconfig.get_config_var("PYEMSCRIPTEN_ABI_VERSION") + if pyemscripten_abi_version: + yield f"pyemscripten_{pyemscripten_abi_version}_wasm32" yield from _generic_platforms() diff --git a/tests/test_tags.py b/tests/test_tags.py index f984bb740..1334f2b7b 100644 --- a/tests/test_tags.py +++ b/tests/test_tags.py @@ -1481,10 +1481,10 @@ def test_emscripten(self, mock_interpreter_name, monkeypatch): expected_interpreter, expected_interpreter, "emscripten_3_1_58_wasm32" ) - def test_pyodide(self, mock_interpreter_name, monkeypatch): + def test_pyemscripten(self, mock_interpreter_name, monkeypatch): expected_interpreter = "cp" + tags._version_nodot(sys.version_info[:2]) monkeypatch.setitem( - sysconfig.get_config_vars(), "PYODIDE_ABI_VERSION", "2024_0" + sysconfig.get_config_vars(), "PYEMSCRIPTEN_ABI_VERSION", "2024_0" ) if mock_interpreter_name("CPython"): monkeypatch.setattr( @@ -1495,12 +1495,12 @@ def test_pyodide(self, mock_interpreter_name, monkeypatch): sysconfig, "get_platform", lambda: "emscripten-3.1.58-wasm32" ) assert list(tags.platform_tags()) == [ - "pyodide_2024_0_wasm32", + "pyemscripten_2024_0_wasm32", "emscripten_3_1_58_wasm32", ] result = list(tags.sys_tags()) assert result[0] == tags.Tag( - expected_interpreter, expected_interpreter, "pyodide_2024_0_wasm32" + expected_interpreter, expected_interpreter, "pyemscripten_2024_0_wasm32" )