Hacktoberfest 2026: die Issues, die Maintainer für den Oktober markiert haben – offen und einsteigerfreundlich. Hacktoberfest-Issues durchsuchen

pip.parse ignores uv.lock dependency-edge platform markers

Offen
#4,287 0 Kommentare 0 Reaktionen 0 zugewiesene Personen Auf GitHub ansehen

Maintainer antworten meist innerhalb von 1 Tag

@kdelalic arbeitet bereits daran.

Seit 19.10.2026.

  • #4286 von @kdelalic — offen

Bewertung

Schwierigkeit
4/5
Geschätzter Aufwand
3-5 Tage
Anfängerfreundlichkeit
20/100
Issue-Typ
Bug
Klarheit
Klar beschrieben
Aktivitätsstatus
Veraltet
Tech-Stack
python

Rechercherichtung

Read _parse_uv_lock_json in python/private/pypi/parse_requirements.bzl and inspect PR #4286, which already proposes a fix and includes regression coverage. The reproduction in this issue shows the failure for uvloop across Linux x86_64 and macOS arm64; done means only the Linux artifact is selected and the related parser and uv-lock conversion tests pass.

Vom Indexierungsmodell aus dem Issue-Text verfasst.

Beschreibung

Affected Rule

pip.parse(uv_lock = ...), specifically _parse_uv_lock_json in python/private/pypi/parse_requirements.bzl.

Is this a regression?

Unknown. Confirmed against upstream main at 9f3ab0630537ce54356d78a28f4618d926ec31ce.

Description

When importing a universal uv.lock, packages with platform-specific dependency edges are assigned to platforms on which they are unreachable. The parser checks package-level resolution-markers but ignores the marker on dependency edges. uv does not necessarily write package-level markers for these dependencies.

For a Linux-only uvloop dependency, the parser selects a Linux wheel for Linux and its source archive for macOS. If a package has a compatible macOS wheel, that artifact can also be selected even though the package should be absent on macOS.

Minimal reproduction

Create this pyproject.toml:

[project]
name = "rules-python-platform-marker-repro"
version = "0.1.0"
requires-python = ">=3.9"
dependencies = ["uvloop==0.22.1; sys_platform == 'linux'"]

[tool.uv]
environments = [
    "sys_platform == 'linux' and platform_machine == 'x86_64'",
    "sys_platform == 'darwin' and platform_machine == 'arm64'",
]

Generate uv.lock with uv lock. The lock generated by uv 0.11.21 contains:

[[package]]
name = "rules-python-platform-marker-repro"
version = "0.1.0"
source = { virtual = "." }
dependencies = [
    { name = "uvloop", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" },
]

The uvloop package entry has Linux wheels and an sdist, but no package-level resolution-markers. The lock's top-level resolution markers are separate from package-level markers.

Importing this lock with pip.parse for target_platforms = ["linux_x86_64", "osx_aarch64"] should resolve uvloop only for Linux. To confirm the failure independently of package installation, I invoked the unmodified public parse_requirements function through an isolated Bazel module against a JSON serialization of this actual lock, with Python 3.9 Linux x86_64 and macOS arm64 platform definitions. The parser returned:

uvloop-0.22.1-cp39-cp39-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl: ["linux_x86_64"]
uvloop-0.22.1.tar.gz: ["osx_aarch64"]

Expected: Only the Linux wheel; no macOS artifact.

Actual: The parser additionally selects uvloop's sdist for macOS. No macOS package build or installation was attempted in this reproduction; the incorrect artifact selection itself was observed directly.

Environment
  • Host: macOS arm64.
  • Target marker environments: Linux x86_64 and macOS arm64, Python 3.9.6.
  • Bazel: 9.1.1.
  • uv: 0.11.21.
  • rules_python: upstream commit 9f3ab0630537ce54356d78a28f4618d926ec31ce.
Proposed fix

PR #4286 walks the dependency graph from virtual/editable workspace roots per target platform, applying edge markers and retaining packages only on platforms where they are reachable. It also preserves package resolution markers and version/source identities and follows requested dependency extras.

The same real-lock reproduction selects only the Linux artifact with that patch. The PR includes regression coverage for this case and related graph/extras cases; all 66 selected parser and uv-lock conversion tests pass locally.

Vorherrschende Sprache
Starlark
Sterne
688
Forks
728
Ø Merge
1 T. 1 Std.
Gemergte PRs (30 T.)
94

Entwicklungsumgebung

Erste Schritte

  1. Lesen Sie das ganze Issue und danach den Beitragsleitfaden des Projekts.
  2. Schreiben Sie ins Issue, dass Sie es übernehmen — das erspart doppelte Arbeit.
  3. Forken Sie das Repository und arbeiten Sie in einem Branch.
  4. Öffnen Sie einen Pull Request, der die Issue-Nummer nennt.

Mehr aus bazel-contrib/rules_python

Alle Issues in bazel-contrib/rules_python

Ähnliche Issues

Weitere Issues zu Backend & API Design

Neue Issues direkt in Ihr Postfach

Eine kurze Übersicht über anfängerfreundliche GitHub-Issues.