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.
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_libraryrule 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 uneducated guess at narrowing down the problem is that
@protobuf//python:python_toolchainis mis-resolving such that it depends on@protobuf//python:protobuf_python, which in turn depends onpython_edition_defaults.py, in turn generated from C++ stuff. I would expect the dependency chain to stop afterpython_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
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_libraryrule and I wouldn't expect it to affect the proto library's upstream dependencies.