bazel-contrib / bazel-contrib/rules_python
(feat request) Add a gazelle directive for using `requirement()` for pip-installable dependencies
- Dominant language
- Starlark
- Stars
- 688
- Forks
- 721
- Avg merge
- 14h 49m
- Merged PRs (30d)
- 81
Description
# 🚀 feature request
### Relevant Rules
+ gazelle
+ requirements.bzl
### Description
Gazelle generates deps using the library labels directly, rather than using `requirement()` (possibly because of the [drawbacks of `requirement()`](https://github.com/bazelbuild/rules_python/issues/414)).
```starlark
# using labels
py_library(
name = "foo",
srcs = ["foo.py"],
deps = ["@pip_parse_name//boto3"],
)
```
```starlark
# using `requirement()` function
load("@pip_parse_name//:requirements.bzl", "requirement")
py_library(
name = "foo",
srcs = ["foo.py"],
deps = [requirement("boto3")],
)
```
It would be great if we could configure this on a per-package basis. Users would then be able to opt-in to using `requirement()`, making the transition from manually-built BUILD files to gazelle-generated files much easier (as the diff will be much smaller or nonexistent[^1]).
[^1]: The [docs](https://rules-python.readthedocs.io/en/latest/pypi-dependencies.html#using-third-party-packages) guide users to use `requirement()` initially, and I'm not sure how many people opt to use labels instead.
### Describe the solution you'd like
Add a new directive `gazelle:python_use_pip_requirement_function` (or similar name) that accepts 3 values:
+ **`false` (the default):** Use library labels directly. Same as current behavior.
+ **`true`:** Use `requirement("library")`
+ **`DEFAULT` or `RESET`:** reset to the default as defined by `rules_python`.
Example:
```starlark
# no directive set. Use labels directly.
py_library(
...,
deps = ["@pip_parse_name//boto3"],
)
# gazelle:python_use_pip_requirement_function false
py_library(
...,
deps = ["@pip_parse_name//boto3"],
)
# gazelle:python_use_pip_requirement_function true
load("@pip_parse_name//:requirements.bzl", "requirement")
py_library(
...,
deps = [requirement("boto3")],
)
# gazelle:python_use_pip_requirement_function DEFAULT
py_library(
...,
deps = ["@pip_parse_name//boto3"],
)
```
### Describe alternatives you've considered
None 🙃. I'm happy to hear some though.
Contributor guide
Assessment
This issue has not been assessed yet.