Skip to content

Commit

Permalink
Hardcode support for platform pyodide_wasm32 (#159)
Browse files Browse the repository at this point in the history
* Hardcode support for platform pyodide_wasm32

I don't like it; this feels like a hack, but it works, and I would be
happy to get more guidance.

Also one weird thing, is if I installl pywavelets nightly, it installs
numpy stable; while the index does have a numpy nightly;

And with the same config, if I ask it to install numpy; it does install
numpy nightly.

So there is something wonkey in recursive dependency handling of
indexes.

* try to add test
  • Loading branch information
Carreau authored Nov 26, 2024
1 parent 1fa0b52 commit 5f01db3
Show file tree
Hide file tree
Showing 4 changed files with 33 additions and 3 deletions.
7 changes: 7 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,13 @@ All notable changes to this project will be documented in this file.
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).

## Unreleased

### Fixed

- Fix a bug that prevented some wasm32 wheel to be recognized as compatible with pyodide
[#159](https://github.com/pyodide/micropip/pull/159)

## [0.7.1] - 2024/11/11

### Fixed
Expand Down
13 changes: 10 additions & 3 deletions micropip/_utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
import json
from importlib.metadata import Distribution
from pathlib import Path
from sysconfig import get_platform
from sysconfig import get_config_var, get_platform

from packaging.requirements import Requirement
from packaging.tags import Tag
Expand Down Expand Up @@ -62,8 +62,15 @@ def get_files_in_distribution(dist: Distribution) -> set[Path]:


@functools.cache
def sys_tags() -> list[Tag]:
return list(sys_tags_orig())
def sys_tags() -> tuple[Tag, ...]:
new_tags = []
abi_version = get_config_var("PYODIDE_ABI_VERSION")
pyodide_platform_tag = f"pyodide_{abi_version}_wasm32"
for tag in sys_tags_orig():
if "emscripten" in tag.platform:
new_tags.append(Tag(tag.interpreter, tag.abi, pyodide_platform_tag))
new_tags.append(tag)
return tuple(new_tags)


@functools.cache
Expand Down
3 changes: 3 additions & 0 deletions micropip/package_index.py
Original file line number Diff line number Diff line change
Expand Up @@ -214,6 +214,9 @@ def _fast_check_incompatibility(filename: str) -> bool:
if not filename.endswith(".whl"):
return False

if filename.endswith("wasm32.whl") and sys.platform == "emscripten":
return True

if sys.platform not in filename and not filename.endswith("-none-any.whl"):
return False

Expand Down
13 changes: 13 additions & 0 deletions tests/test_utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@

import pytest
from conftest import CPVER, EMSCRIPTEN_VER, PLATFORM
from pytest_pyodide import run_in_pyodide

import micropip._utils as _utils

Expand Down Expand Up @@ -103,6 +104,18 @@ def test_check_compatible(mock_platform, interp, abi, arch, ctx):
check_compatible(wheel_name)


@run_in_pyodide
def test_check_compatible_wasm32(selenium_standalone_micropip):
"""
Here we check in particular that pyodide_2024_0_wasm32 wheels are seen as
compatible as the platform is emscripten
"""
from micropip._utils import check_compatible

wheel_name = "pywavelets-1.8.0.dev0-cp312-cp312-pyodide_2024_0_wasm32.whl"
check_compatible(wheel_name)


_best_tag_test_cases = (
"package, version, incompatible_tags, compatible_tags",
# Tests assume that `compatible_tags` is sorted from least to most compatible:
Expand Down

0 comments on commit 5f01db3

Please sign in to comment.