Skip to content

pip_parse does not generate @pypi packages for Windows ARM64 #3913

Description

@MGN-GIT

Problem

I am trying to build TensorFlow on Windows ARM64 using Bazel/rules_python hermetic Python.

Platform:

  • OS: Windows ARM64
  • Target triple: aarch64-pc-windows-msvc
  • Python: 3.13 ARM64
  • Bazel: 7.7.0
  • Build uses WORKSPACE / legacy pip_parse, not bzlmod

TensorFlow initializes PyPI dependencies through pip_parse from:

load("@rules_python//python:pip.bzl", "package_annotation", "pip_parse")

pip_parse(
    name = "pypi",
    python_interpreter_target = "@python_3_13_host//:python",
    requirements_lock = REQUIREMENTS_WITH_LOCAL_WHEELS,
    envsubst = ["RULES_PYTHON_ENABLE_PIPSTAR"],
    # tried adding target platform settings, see below
)

Observed behavior

The generated file:

external/pypi/requirements.bzl

contains no packages:

all_requirements = []
all_whl_requirements_by_package = {}
all_data_requirements = []
_packages = []

This causes Bazel analysis failures later for normal TensorFlow deps such as:

@pypi//wheel
@pypi//gast

because the @pypi repo is empty.

The generated marker file:

external/pypi/requirements_with_markers.out.json

contains platform mappings such as:

[
  "linux_aarch64",
  "linux_arm",
  "linux_ppc",
  "linux_riscv64",
  "linux_s390x",
  "linux_x86_64",
  "osx_aarch64",
  "osx_x86_64",
  "windows_x86_64"
]

but it does not include:

windows_aarch64
windows_arm64
cp313_windows_aarch64

So Windows x64 works, but Windows ARM64 does not.

Things I tried

I patched the pip_parse call to include:

target_platforms = [
    "{os}_{arch}",
    "windows_aarch64",
]

but the generated requirements_with_markers.out.json still only listed windows_x86_64, not windows_aarch64, and requirements.bzl was still empty.

I also tried using the legacy-looking attribute:

experimental_target_platforms = [
    "windows_aarch64",
]

and planned to try:

experimental_target_platforms = [
    "cp313_windows_aarch64",
]

and:

experimental_target_platforms = [
    "all",
]

but I’m not sure what the supported platform string should be for Windows ARM64 in legacy pip_parse.

Expected behavior

pip_parse should support Windows ARM64 / aarch64-pc-windows-msvc and generate non-empty @pypi repositories when requirements contain packages compatible with Windows ARM64.

At minimum, the generated platform marker evaluation should include the appropriate Windows ARM64 platform name, probably one of:

windows_aarch64
cp313_windows_aarch64

Questions

  1. What is the correct platform string for Windows ARM64 in pip_parse?
  2. Does legacy WORKSPACE pip_parse support Windows ARM64 target platforms?
  3. Should target_platforms or experimental_target_platforms be used for WORKSPACE pip_parse?
  4. Is win_arm64 wheel tag mapped to windows_aarch64 anywhere in rules_python?
  5. Is this expected to work with RULES_PYTHON_ENABLE_PIPSTAR=0?

Reproduction context

This is from TensorFlow’s hermetic Python setup through rules_ml_toolchain:

pip_parse(
    name = "pypi",
    annotations = numpy_annotations,
    python_interpreter_target = "@{}_host//:python".format(
        get_toolchain_name_per_python_version("python"),
    ),
    extra_hub_aliases = {
        "numpy": ["numpy_headers"],
    },
    envsubst = ["RULES_PYTHON_ENABLE_PIPSTAR"],
    requirements_lock = REQUIREMENTS_WITH_LOCAL_WHEELS,
    extra_pip_args = extra_pip_args,
    download_only = is_download_only,
)

The hermetic Python repository is correctly selecting:

python_3_13_aarch64-pc-windows-msvc

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Fields

    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions