Skip to content

Avoid downloading protobuf dependancy when not needed #2543

Open
@harrysarson

Description

@harrysarson

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 #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.

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions