bazel-contrib / bazel-contrib/rules_python
Custom platform from `pip.default` can't be used by consumers
- 主要言語
- Starlark
- スター
- 688
- フォーク
- 721
- 平均マージ
- 15時間 7分
- マージ済み PR(30日)
- 76
説明
# 🐞 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.
コントリビューションガイド
調査の方向性
python/private/pypi/extension.bzl とその build_config() の処理から始め、次に parse_requirements.bzl(MacOS 用の _package_srcs())と hub_builder.bzl(Ubuntu 用の _evaluate_markers())にある関連ロジックを追ってください。リンクされた最小再現を使って、依存モジュールの pip.default() のプラットフォームが、その pip.parse() ハブに対して適用され、ルートモジュールで再宣言する必要がないことを確認してください。
索引モデルが issue の本文から書いたものです。
評価
- 技術スタック
- python
- 領域
- build-system
- issue の種類
- バグ
- 難易度
- 4/5
- 見積もり時間
- 3〜5日
- 活発さ
- 停滞
- 明瞭さ
- おおむね明確
- 初心者へのやさしさ
- 35/100