Skip to content

Platform-specific packages missing from the unified @pypi hub聽#4171

Description

@hartikainen

馃悶 bug report

(This was diagnosed with help from Codex.)

Affected Rule

pip.parse and the automatically generated unified @pypi hub.

Is this a regression?

Not sure.

Description

I'm seeing an issue where packages that appear only in some platform-specific requirements files are omitted from the unified @pypi hub.

I have an example where I expect @pypi//six to resolve on Linux when the selected concrete hub provides six for Linux. Instead, the unified hub omits the package entirely, even though the concrete hub provides the alias.

The unified hub collects packages from exposed_packages, which filters out platform-specific packages. I think it should collect packages from each concrete hub's complete wheel map and let that hub's aliases handle platform selection.

馃敩 Minimal Reproduction

With rules_python and a Python 3.11 toolchain configured, add:

# MODULE.bazel
pip = use_extension("@rules_python//python/extensions:pip.bzl", "pip")

pip.parse(
    hub_name = "pypi_b",
    python_version = "3.11",
    requirements_by_platform = {
        "//:requirements_linux.txt": "linux_*",
        "//:requirements_windows.txt": "windows_*",
    },
    target_platforms = [
        "linux_x86_64",
        "windows_x86_64",
    ],
)

pip.default(default_hub = "pypi_b")

use_repo(pip, "pypi_b", "pypi")
# BUILD.bazel
exports_files([
    "requirements_linux.txt",
    "requirements_windows.txt",
])
# requirements_linux.txt
colorama==0.4.5
six==1.16.0
# requirements_windows.txt
colorama==0.4.5

On Linux x86_64, compare:

bazel build @pypi_b//six
bazel build @pypi//six

The concrete alias resolves, but the unified alias is absent.

馃敟 Exception or Error

Bazel cannot resolve @pypi//six because the unified repository does not contain the six package.

馃實 Your Environment

Operating system: linux_x86_64.

Bazel version used to validate the fix: 9.1.1.

rules_python @ 9cc620ebf92d9afaa1c0535968d82d5a7d7e4522.

Anything else relevant?

Using the concrete hub label avoids the missing unified alias. I'd be happy to contribute the fix and regression coverage.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions