bazel-contrib / bazel-contrib/rules_python
Support `uv` as part of `rules_python`
- 主要言語
- Starlark
- スター
- 688
- フォーク
- 721
- 平均マージ
- 15時間 7分
- マージ済み PR(30日)
- 76
説明
Just creating this as a placeholder for discussions and documenting some thoughts/findings. `rules_uv` is doing its job well and replicating the functionality in `rules_python` would be duplicate effort. However, `rules_uv` does not support `WORKSPACE` installations (at least the [releases] don't advertise such support) and `rules_python` needs to support `WORKSPACE` installations.
[releases]: https://github.com/theoremlp/rules_uv/releases
As a result I see the following options:
1. Do not support `uv`. This has a drawback of longer compilation times with the included `pip-compile` tooling. `uv` is just a binary and could in theory be later reused for common operations with whl packages.
2. Support `uv` only on `bzlmod` by including `rules_uv` as a dependency. This would require us to expose `rules_uv` via `@python_versions` or something similar so that we don't have loads that load `rules_uv` within the main `//python/*.bzl` files to avoid breaking `WORKSPACE` users. However this would not allow us to use it for our own example testing because they should produce the same output with and without bzlmod. Since we cannot dog-food `rules_uv`, it makes it a hard proposition.
3. Write the `WORKSPACE` `deps.bzl` implementation for `rules_uv` so that we can depend on it.
4. Support `uv` by copying/reimplementing the `uv` support as a separate rule/macro whilst not relying on `rules_uv`. The drawback is that we would have to reimplement parts of it, but the benefit would be that the extra tests that we would need to have would be next to the implementation. We could also provide Windows support in this way as `rules_uv` does not support Windows yet due to relying on `bash` scripting for `pip_compile`.
Current status:
- [x] `uv pip compile`, works with custom authentication helpers.
- [x] `uv lock`, works with custom authentication helpers.
- [x] Parse `uv.lock` and support `requirements.txt` feature subset, works with bazel downloader, no sdist support.
- [x] Downloading and customizing downloaded `uv` versions.
コントリビューションガイド
調査の方向性
まず現在のチェックリストと4つの実装オプションを確認し、続いて //python/*.bzl のエントリポイント、deps.bzl に対する WORKSPACE のサポート、bzlmod の統合、および rules_uv のリリースを調査します。既存の uv.lock と requirements.txt の扱い、および example-test の期待事項を比較します。プロジェクトがアプローチを選択し、必要な WORKSPACE と bzlmod の動作を明示するまで、完了とはみなしません。
索引モデルが issue の本文から書いたものです。
評価
- 技術スタック
- python
- 領域
- build-system
- issue の種類
- 機能追加
- 難易度
- 5/5
- 見積もり時間
- 1週間以上
- 活発さ
- 静か
- 明瞭さ
- 説明が足りない
- 初心者へのやさしさ
- 30/100