bazel-contrib / bazel-contrib/rules_python
pip_parse does not generate @pypi packages for Windows ARM64
- Ngôn ngữ chính
- Starlark
- Star
- 688
- Fork
- 721
- Merge trung bình
- 15 giờ 7 phút
- Pull request đã merge (30 ngày)
- 76
Mô tả
### 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:
```starlark
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:
```text
external/pypi/requirements.bzl
```
contains no packages:
```starlark
all_requirements = []
all_whl_requirements_by_package = {}
all_data_requirements = []
_packages = []
```
This causes Bazel analysis failures later for normal TensorFlow deps such as:
```text
@pypi//wheel
@pypi//gast
```
because the `@pypi` repo is empty.
The generated marker file:
```text
external/pypi/requirements_with_markers.out.json
```
contains platform mappings such as:
```json
[
"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:
```text
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:
```starlark
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:
```starlark
experimental_target_platforms = [
"windows_aarch64",
]
```
and planned to try:
```starlark
experimental_target_platforms = [
"cp313_windows_aarch64",
]
```
and:
```starlark
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:
```text
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`:
```starlark
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:
```text
python_3_13_aarch64-pc-windows-msvc
```
Hướng dẫn đóng góp
Hướng nghiên cứu
Bắt đầu trong triển khai legacy của pip_parse tại @rules_python//python:pip.bzl, sau đó kiểm tra cách nó tạo ra external/pypi/requirements_with_markers.out.json và external/pypi/requirements.bzl. Theo dõi ánh xạ tên nền tảng và wheel-tag cho Windows ARM64, đồng thời so sánh các đường dẫn target_platforms và experimental_target_platforms; hoàn thành khi một cấu hình được hỗ trợ tạo ra mục nền tảng Windows ARM64 như mong đợi và các kho lưu trữ gói không rỗng.
Do mô hình lập chỉ mục viết ra từ nội dung của issue.
Đánh giá
- Công nghệ
- python
- Lĩnh vực
- build-system
- Loại issue
- Lỗi
- Độ khó
- 4/5
- Thời gian dự kiến
- 3-5 ngày
- Mức độ hoạt động
- Ít trao đổi
- Độ rõ ràng
- Khá rõ ràng
- Mức phù hợp với người mới
- 45/100