bazel-contrib/rules_python

Avoid downloading protobuf dependancy when not needed

Open

#2 543 ouverte le 2 janv. 2025

Voir sur GitHub
 (5 commentaires) (0 réactions) (0 assignés)Starlark (705 forks)auto 404
help wantedneed: upstream support

Métriques du dépôt

Stars
 (679 stars)
Métriques de merge PR
 (Métriques PR en attente)

Description

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.

Guide contributeur