Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/mercurial/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Protocol buffers 在py_proto_compile from pubref/rules_protobuf中使用导入失败:_pb2.py和pb2_grpc.py未创建_Protocol Buffers_Grpc_Bazel_Grpc Python - Fatal编程技术网

Protocol buffers 在py_proto_compile from pubref/rules_protobuf中使用导入失败:_pb2.py和pb2_grpc.py未创建

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,文件名中

我们有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/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论点起作用。