2017-11-15 9 views
0

a.protoをb.protoにインポートし、Bazelでコンパイルしたいと思います。Bazelのpy_proto_libraryに依存関係としてprotobufファイルを追加してください。

BUILD:

import public "a.proto"; 

b.proto

py_proto_library(
    name = "b_py_proto", 
    protos = ["b.proto"], 
    deps = [ 
     ":a_proto" 
    ] 
) 

py_proto_library(
    name = "a_proto", 
    protos = ["a.proto"] 
) 

私はBazelでそれを実行すると、私はそれが動作するはず方法です例hereに応じていても、does not have mandatory providers: 'py'.エラーが発生します。

ファイルグループを使用して依存関係としてa.protoを追加しようとしましたが、同じエラーが発生しました。明らかにdepsにはPythonファイルが必要です。 py_proto_libraryはjava_proto_libraryと異なる動作をしていますか?もしそうなら、どのように正しくインポートされるように依存関係としてa.protoを追加できますか?

EDIT: は、私はあなたがproto_depsとして渡す場合は、このルールは.protoファイルを受け付けhttps://github.com/pubref/rules_protobuf/archive/v0.8.1.tar.gz

からいるProtobufをロードしていますが、その後、私はエラーにImport "a.proto" was not found or had errors.

を取得たぶん私は何とかimportsを指定する必要がありますか?

答えて

0

最後にこれを考え出しました。私は最初のものを使用していた、その1はproto_depsとして.proto依存関係をとる

  1. https://github.com/pubref/rules_protobuf/blob/master/python/rules.bzl
  2. https://github.com/google/protobuf/blob/master/protobuf.bzl

:私の混乱は異なる定義と異なるいるProtobufライブラリが存在するという事実から来ました。私が見逃したもう一つの点は、インポートの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() 
1

上流のprotobufによって提供されるpy_proto_libraryマクロは、Bazelのブログ記事で説明されているルールのようには機能しません。 py_proto_libraryルールのdepsには、他のpy_proto_libraryルールしか含まれていない可能性があります。 .proto自体のファイルはsrcsにする必要があります。

+0

私はまだ取得 'py_proto_library'にsrcs''としてa.protoを追加する場合同じエラー。私はa.protoの 'py_proto_library'ルールを追加し、' deps'としてそれを使用して、 'a.proto"の "a.proto"を見つけられなかったか、エラーがあったのです。 – Zeitgeist

関連する問題