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:
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
- What is the correct platform string for Windows ARM64 in
pip_parse?
- Does legacy WORKSPACE
pip_parse support Windows ARM64 target platforms?
- Should
target_platforms or experimental_target_platforms be used for WORKSPACE pip_parse?
- Is
win_arm64 wheel tag mapped to windows_aarch64 anywhere in rules_python?
- 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
Problem
I am trying to build TensorFlow on Windows ARM64 using Bazel/rules_python hermetic Python.
Platform:
aarch64-pc-windows-msvcpip_parse, not bzlmodTensorFlow initializes PyPI dependencies through
pip_parsefrom:Observed behavior
The generated file:
contains no packages:
This causes Bazel analysis failures later for normal TensorFlow deps such as:
because the
@pypirepo is empty.The generated marker file:
contains platform mappings such as:
but it does not include:
So Windows x64 works, but Windows ARM64 does not.
Things I tried
I patched the
pip_parsecall to include:but the generated
requirements_with_markers.out.jsonstill only listedwindows_x86_64, notwindows_aarch64, andrequirements.bzlwas still empty.I also tried using the legacy-looking attribute:
and planned to try:
and:
but I’m not sure what the supported platform string should be for Windows ARM64 in legacy
pip_parse.Expected behavior
pip_parseshould support Windows ARM64 /aarch64-pc-windows-msvcand generate non-empty@pypirepositories 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:
Questions
pip_parse?pip_parsesupport Windows ARM64 target platforms?target_platformsorexperimental_target_platformsbe used for WORKSPACEpip_parse?win_arm64wheel tag mapped towindows_aarch64anywhere in rules_python?RULES_PYTHON_ENABLE_PIPSTAR=0?Reproduction context
This is from TensorFlow’s hermetic Python setup through
rules_ml_toolchain:The hermetic Python repository is correctly selecting: