bazel-contrib / bazel-contrib/rules_python

Avoid downloading protobuf dependancy when not needed

Đang mở
#2,543 5 bình luận 0 reaction 0 người được giao Xem trên GitHub
help wanted need: upstream support
Ngôn ngữ chính
Starlark
Star
688
Fork
721
Merge trung bình
15 giờ 7 phút
Pull request đã merge (30 ngày)
76

Mô tả

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.

Hướng dẫn đóng góp

Mở hướng dẫn đóng góp

Hướng nghiên cứu

Bắt đầu bằng cách đọc MODULE.bzl quanh dòng 12 và truy vết mối quan hệ giữa dependency protobuf với py_proto_library trong bzlmod. Tái hiện hành vi bằng một registry tùy chỉnh có các URL nguồn protobuf không hợp lệ, sử dụng một project phụ thuộc vào rules_python nhưng không định nghĩa target protobuf nào. Công việc được coi là hoàn tất khi project không còn cố tải protobuf trừ khi phần hỗ trợ liên quan được sử dụng, và comment hoặc tài liệu khớp với hành vi đó.

Do mô hình lập chỉ mục viết ra từ nội dung của issue.

Đánh giá

Công nghệ
python
Lĩnh vực
build-system
Loại issue
Lỗi
Độ khó
4/5
Thời gian dự kiến
3-5 ngày
Mức độ hoạt động
Đình trệ
Độ rõ ràng
Khá rõ ràng
Mức phù hợp với người mới
35/100

Nhận issue mới trong hộp thư của bạn

Bản tóm tắt ngắn những issue GitHub phù hợp với người mới.