bazel-contrib / bazel-contrib/rules_python

Avoid downloading protobuf dependancy when not needed

Offen
#2,543 5 Kommentare 0 Reaktionen 0 zugewiesene Personen Auf GitHub ansehen
help wanted need: upstream support
Vorherrschende Sprache
Starlark
Sterne
688
Forks
721
Ø Merge
15 Std. 7 Min.
Gemergte PRs (30 T.)
76

Beschreibung

Hi we recently migrated a project from workspace to bzlmod and noticed our builds now pull in more things from the internet as a result.
In particular we saw that our builds started to download protobuf (from https://github.com/protocolbuffers/protobuf/releases/download/v29.0-rc2/protobuf-29.0-rc2.zip).
This was despite none of our targets referencing (either directly nor indirectly) `py_proto_library` (or any other protobuf target from `rules_python` or any other module).

It seems that in a workspace project dependencies are fetched lazily [1] whereas in a bzlmod project, dependencies are fetched eagerly.

Reading the source of this library, I saw a comment in the MODULE.bzl https://github.com/bazelbuild/rules_python/blob/29fdcc2c292d64e7c66746d1c701ab67aa05c79b/MODULE.bazel#L12 that suggests the `protobuf` dep will be loaded only if the `py_proto_library` is used. However, that doesn't match my tests where `protobuf` is download by all projects that depend on `rules_python` even if they do not use _any_ rules from it [2].

I am wondering

1. if there is a way to use `rules_python` without pulling `protobuf` if we do not need protobuf support?
2. If the comment linked above needs updating/removing?

#### Related

I think https://github.com/bazelbuild/rules_python/issues/2498 is similar although that is about rules_kotlin and is more about toolchains fetched as module extensions rather than modules downloaded directly.

#### Notes

1: https://bazel.build/extending/repo#when_is_the_implementation_function_executed
2: You can test this by creating a custom registry (https://bazel.build/external/registry) and modifying the `source.json` file of all the protobuf modules to set the `url` field to something that does not exist. Building a bzlmod project that uses rules_python but does not have any `py_proto_library` targets will then fail showing that bazel does try to fetch protobuf.

Beitragsleitfaden

Beitragsleitfaden öffnen

Rechercherichtung

Lies zunächst MODULE.bzl in der Umgebung von Zeile 12 und verfolge nach, wie die protobuf-Abhängigkeit unter bzlmod mit py_proto_library zusammenhängt. Reproduziere das Verhalten mit einer benutzerdefinierten Registry, deren protobuf-Quell-URLs ungültig sind, unter Verwendung eines Projekts, das von rules_python abhängt, aber keine protobuf-Ziele definiert. Als erfüllt gilt die Aufgabe, wenn das Projekt nicht mehr versucht, protobuf abzurufen, sofern die entsprechende Unterstützung nicht verwendet wird, und der Kommentar oder die Dokumentation diesem Verhalten entspricht.

Vom Indexierungsmodell aus dem Issue-Text verfasst.

Bewertung

Tech-Stack
python
Bereich
build-system
Issue-Typ
Bug
Schwierigkeit
4/5
Geschätzter Aufwand
3-5 Tage
Aktivitätsstatus
Veraltet
Klarheit
Größtenteils klar
Anfängerfreundlichkeit
35/100

Neue Issues direkt in Ihr Postfach

Eine kurze Übersicht über anfängerfreundliche GitHub-Issues.