-
Notifications
You must be signed in to change notification settings - Fork 4.1k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Bazel not picking up the right protobuf python library. #1209
Comments
@damienmg Can you look into this? |
Maybe try to setting the path to python binary. It should definitely have protobuf in the python path. @davidzchen might have more insights. |
Well, things are working for me after I installed the latest python protobuf library. But Bazel shouldn't be using my local protobuf library, but the ones in the submodule. |
Totally agree, that's definitely should not happen. |
This is blocking tensorflow/tensorflow#1289. I'll go ahead and prioritize this and investigate. |
…rectory. Users often encounter a Python import error when trying to build Python protos if protobuf is installed locally on the machine. In this case, Python ends up looking in the wrong directory when importing files (see bazelbuild/bazel#1209 and tensorflow/tensorflow#2021). It seems that the problem is caused by Python getting confused when there are Python source files that are meant to be part of the same package but are in separate directories. Prior to protocolbuffers#1233, the Bazel build setup would copy the Python runtime sources and all generated sources for the builtin protos into the root directory (assuming that the protobuf tree is vendored in a google/protobuf directory). With protocolbuffers#1233, the two sets of sources are kept in their respective directories but both `src/` and `python/` are added to the `PYTHONPATH` using the new `imports` attribute of the Bazel Python rules. However, both the runtime sources and the generated sources are under the same package: `google.protobuf`, causing Python to become confused when trying to import modules that are in the other directory. This patch adds a workaround to the Bazel build to add a modified version of the original `internal_copied_filegroup` macro to copy the `.proto` files under `src/` to `python/` before building the `py_proto_library` targets for the builtin protos. This ensures that the generated sources for the builtin protos will be in the same directory as the corresponding runtime sources. This patch was tested with the following: * All Python tests in protobuf * All Python tests in tensorflow * All tests in [Skydoc](https://github.com/bazelbuild/skydoc) * Importing protobuf as `//google/protobuf` * Importing and binding targets under `//external` * Importing protobuf as `//third_party/protobuf`
This turned out to be a problem in the protobuf Bazel build setup. protocolbuffers/protobuf#1586 has been merged to fix this problem. Once tensorflow/tensorflow#1289 is merged to bump TensorFlow's dependency to the protobuf version that contains the fix, this problem will be fixed on the TensorFlow side as well. |
This way, we have the fix for the Python protobuf build issue (see bazelbuild/bazel#1209). -- MOS_MIGRATED_REVID=124878800
Trying to build TensorFlow Serving (specific rule //tensorflow_serving/session_bundle/example:half_plus_two) fails with this error.
Protobufs are imported as the submodule of TensorFlow, which is itself a submodule of TensorFlow Serving.
It seems like instead of getting this protobuf python library its picking up my local python protobuf library resulting in this error.
Output of 'bazel info'
The text was updated successfully, but these errors were encountered: