protocolbuffers / protocolbuffers/protobuf
py_proto_library rule not using prebuilt protoc
@anandolee is already working on this.
Since Jun 16, 2026.
- Dominant language
- C++
- Stars
- 72k
- Forks
- 16.3k
- Avg merge
- 1d 17h
- Merged PRs (30d)
- 140
Description
What version of protobuf and what language are you using?
Version: 35.1
Language: Python
What supported operating system version are you using (e.g. Linux, Windows) ?
macOS 26.5.1
What supported runtime / compiler version are you using (e.g. python version, gcc version)
Bazel 9.1.0
rules_python 2.0.0
Python 3.13 toolchain from rules_python
What did you do?
I have what I think is a pretty vanilla Bazel/Python/Protobuf configuration, and I'm trying to use the recently-released support for prebuilt protobuf compiler binaries. It's not working - trying to build a py_proto_library rule results in the protobuf compiler being built from source.
To debug, I ran bazel cquery 'somepath("//my_project/proto:my_py_proto", "@protobuf//src/google/protobuf")' which gave me the following dependency chain:
//my_project/proto:my_py_proto
@protobuf//python:python_toolchain
@protobuf//python:protobuf_python
@protobuf//python:python_srcs
@protobuf//python:python_src_files
@protobuf//python:google/protobuf/internal/python_edition_defaults.py
@protobuf//python:embedded_python_edition_defaults_generate
@protobuf//editions:internal_defaults_escape
@protobuf//src/google/protobuf:protobuf
My uneducated guess at narrowing down the problem is that @protobuf//python:python_toolchain is mis-resolving such that it depends on @protobuf//python:protobuf_python, which in turn depends on python_edition_defaults.py, in turn generated from C++ stuff. I would expect the dependency chain to stop after python_toolchain. To the extent that Python sources are needed to compile my protos, I'd expect them to be part of the prebuilt compiler distribution, and to the extent they're needed at runtime I'd expect to get them from PyPI. But my convictions aren't very strong here, maybe I'm doing something obviously wrong?
For good measure I also tried
bazel build //my_project/proto:my_py_proto \
--'@protobuf//bazel/flags:prefer_prebuilt_protoc' \
--incompatible_enable_proto_toolchain_resolution
with the same result.
What did you expect to see
Prebuilt compiler used, compiler not built from source
What did you see instead?
Compiler built from source
Anything else we should know about your project / environment
I have some gross workarounds in my BUILD files to relocate the proto Python modules going into the wheel I'm trying to build, but all of that is downstream of the py_proto_library rule and I wouldn't expect it to affect the proto library's upstream dependencies.
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Assessment
This issue has not been assessed yet.