bazel-contrib / bazel-contrib/rules_python
Custom platform from `pip.default` can't be used by consumers
- 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ả
# 🐞 bug report
## Affected Rule
The issue is caused by the bzlmod module extension pip in the pip.default / pip.parse tag handling in:
- python/private/pypi/extension.bzl (`build_config()`)
- python/private/pypi/parse_requirements.bzl (MacOS, `_package_srcs()`)
- python/private/pypi/hub_builder.bzl (Ubuntu, `_evaluate_markers()`)
### Is this a regression?
No.
### Description
When pip.default() is called from a non-root Bazel module (a dependency module), it is ignored while building the pip extension config. At the same time, pip.parse() in that dependency module is still processed and can create a hub repo that the consumer can use transitively.
This makes it impossible (or very confusing) for a dependency module to ship a reusable pip.parse() hub that relies on custom platforms defined by that same module’s pip.default().
#### Expected behavior
pip.default() platform definitions from a dependency module are applied at least for that module’s own pip.parse() tags.
#### Actual behavior
- pip.default() from dependency modules is ignored.
- pip.parse() from dependency modules is processed.
- If pip.parse() needs a custom platform, evaluation will fail with an error.
- Workaround today: the root module must re-declare the same platforms in its own pip.default().
## 🔬 Minimal Reproduction
Reproduction repository:
## 🔥 Exception or Error
- MacOS: `The target platform 'cp312.12_plat_a' could not be found in ["cp312.12_linux_x86_64", "cp312.12_linux_aarch64", "cp312.12_osx_aarch64", "cp312.12_osx_x86_64", "cp312.12_windows_x86_64", "cp312.12_windows_aarch64"]`
- Linux: `Error: key "cp312.12_plat_a" not found in dictionary`
## 🌍 Your Environment
### Operating System
```text
MacOS 26.1, Ubuntu 24.04
```
### Output of `bazel version`
```text
7.5.0
```
### Rules_python version
```text
1.7.0
```
### Anything else relevant
None.
## References
None.
Hướng dẫn đóng góp
Hướng nghiên cứu
Bắt đầu với python/private/pypi/extension.bzl và phần xử lý build_config(), sau đó lần theo logic liên quan trong parse_requirements.bzl (_package_srcs() cho MacOS) và hub_builder.bzl (_evaluate_markers() cho Ubuntu). Sử dụng bản tái hiện tối thiểu được liên kết để xác minh rằng các nền tảng của pip.default() trong một dependency module được áp dụng cho pip.parse() hub của module đó mà không yêu cầu root module khai báo lại chú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
- Đình trệ
- Độ rõ ràng
- Khá rõ ràng
- Mức phù hợp với người mới
- 35/100