Protocol buffers 在py_proto_compile from pubref/rules_protobuf中使用导入失败:_pb2.py和pb2_grpc.py未创建
我们有3个相互依赖的proto文件,它们位于Protocol buffers 在py_proto_compile from pubref/rules_protobuf中使用导入失败:_pb2.py和pb2_grpc.py未创建,protocol-buffers,grpc,bazel,grpc-python,Protocol Buffers,Grpc,Bazel,Grpc Python,我们有3个相互依赖的proto文件,它们位于//protocol/proto包中。基本上: //protocol/ |__ proto/ |__ `A.proto` # depends on: `B.proto`, `C.proto` |__ `B.proto` # depends on: `C.proto` |__ `C.proto` 在A.proto中,我们声明,imports B.proto和imports C.proto,文件名中
//protocol/proto
包中。基本上:
//protocol/
|__ proto/
|__ `A.proto` # depends on: `B.proto`, `C.proto`
|__ `B.proto` # depends on: `C.proto`
|__ `C.proto`
在A.proto
中,我们声明,imports B.proto
和imports C.proto
,文件名中没有前缀protocol/path
对于Java代码编译(在//protocol/BUILD
中),我们使用导入
,如下所示,并且该规则非常有效
java_proto_compile(
name = "client-java-proto",
protos = glob(["proto/*.proto"]),
imports = ["protocol/proto"],
with_grpc = True,
)
但是,当我尝试对Python代码编译(也在//protocol/BUILD
中)执行相同操作时,它不起作用:
py_proto_compile(
name = "client-python-proto",
protos = glob(["proto/*.proto"]),
imports = ["protocol/proto/"],
with_grpc = True,
)
bazel-build//protocol:client-python-proto
返回以下错误:
ERROR: ~/protocol/BUILD:31:1: output 'protocol/proto/A_pb2.py' was not created
ERROR: ~/protocol/BUILD:31:1: output 'protocol/proto/A_pb2_grpc.py' was not created
ERROR: ~/protocol/BUILD:31:1: output 'protocol/proto/B.py' was not created
ERROR: ~/protocol/BUILD:31:1: output 'protocol/proto/B_pb2_grpc.py' was not created
ERROR: ~protocol/BUILD:31:1: output 'protocol/proto/C_pb2.py' was not created
ERROR: ~/protocol/BUILD:31:1: output 'protocol/proto/C_pb2_grpc.py' was not created
ERROR: ~/protocol/BUILD:31:1: not all outputs were created or valid
Target //protocol:client-python-proto failed to build
导入导入的proto文件的完整路径(例如,import protocol/proto/A.proto
)可以解决这一问题,但重要的是,我们不能将完整路径添加为前缀。因此,我们试图使imports
参数起作用
你知道原因是什么以及我们如何解决这个问题吗?在你的导入语句中包含路径前缀看来你在这些规则的pubref实现中遇到了一个bug。你应该在导入语句中定义路径,这也是本机
proto_库
所期望的。问题描述指出:>导入导入的proto文件的完整路径(例如导入协议/proto/A.proto)可以解决此问题,但重要的是,我们不要将完整路径添加为前缀。因此,我们试图使imports论点起作用。