我想将a.proto导入b.proto并使用Bazel进行编译。
BUILD:
py_proto_library(
name = "b_py_proto",
protos = ["b.proto"],
deps = [
":a_proto"
]
)
py_proto_library(
name = "a_proto",
protos = ["a.proto"]
)
b.proto
import public "a.proto";
当我使用Bazel运行它时,我得到does not have mandatory providers: 'py'.
错误,即使根据示例here,它应该如何工作。
我尝试使用filegroup将a.proto添加为依赖项,同样的错误,因为显然deps
需要python文件。
py_proto_library的运行方式是否与java_proto_library不同?如果是这样,我如何将a.proto添加为依赖项以便正确导入?
编辑: 我正在从https://github.com/pubref/rules_protobuf/archive/v0.8.1.tar.gz
加载protobuf如果您将这些文件作为.proto
传递,则此规则会接受proto_deps
个文件,但我会收到错误Import "a.proto" was not found or had errors.
也许我应该以某种方式指定imports
?
答案 0 :(得分:1)
上游protobuf提供的deps
宏不像Bazel博客文章中描述的规则那样有效。 py_proto_library
规则的py_proto_library
可能只包含其他.proto
规则。 srcs
自己的文件必须放在 <div class="table-cellprop">
<div class="bottom-pane">
<div class="content-info">
<p>some imp text </p>
<h3>title </h3>
<div class="text-left"> some text with info
<h4>title 2 </h4>
<ul>
<li class="bm-list"> li one </li>
<li class="cm-list"> two </li>
<li class="mm-list"> three </li>
</ul>
</div>
</div>
</div>
</div>
<div class="table-cellprop card-btm">
<div class="bottom-pane">
<div class="content-info"> TextTextTextTextTextTextTextTextTextTextTextText </div>
</div>
</div>
<div class="table-cellprop card-btm">
<div class="bottom-pane">
<div class="content-info"> TextTextTextText </div>
</div>
</div>
。
答案 1 :(得分:1)
终于弄明白了。我的困惑来自于有不同的protobuf库具有不同的定义:
我使用的是第一个,并且.proto
依赖关系为proto_deps
。我错过的另一件事是导入statemnt路径必须相对于WORKSPACE文件。
b.proto:
import public "path/relative/to/WORKSPACE/a.proto";
BUILD:
py_proto_library(
name = "b_py_proto",
protos = ["b.proto"],
proto_deps = [
":a_proto"
]
)
py_proto_library(
name = "a_proto",
protos = ["a.proto"]
)
WORKSPACE:
http_archive(
name = "org_pubref_rules_protobuf",
strip_prefix = "rules_protobuf-0.8.1",
urls = ["https://github.com/pubref/rules_protobuf/archive/v0.8.1.tar.gz"],
sha256 = "fb9852446b5ba688cd7178a60ff451623e4112d015c6adfe0e9a06c5d2dedc08"
)
load("@org_pubref_rules_protobuf//python:rules.bzl", "py_proto_repositories")
py_proto_repositories()