Bazel's Protocol Buffer Rules을 사용하여 Python 언어 바인딩 및 모든 종속성을 컴파일 (생성)하려고합니다. 내 프로젝트의 레이아웃은 proto
이라는 단일 디렉토리로 .proto
파일과 BUILD
파일을 포함하는 단순합니다.공개적으로 표시되는 Bazel ProtoBuf 대상이 '선언되지 않음'
WORKSPACE
BUILD.six
|-- proto
| |-- example.proto
| |-- BUILD
내 WORKSPACE
파일 : 내 WORKSPACE
파일에서
workspace(name = "com_example")
http_archive(
name = "com_google_protobuf",
strip_prefix = "protobuf-3.4.1",
urls = ["https://github.com/google/protobuf/archive/v3.4.1.zip"],
)
new_http_archive(
name = "six_archive",
build_file = "six.BUILD",
url = "https://pypi.python.org/packages/source/s/six/six-1.10.0.tar.gz",
)
bind(
name = "six",
actual = "@six_archive//:six",
)
, 다운로드 한 파일의 예상 SHA-256 해시 가독성을 위해 생략되었습니다. http_archive WORKSPACE 규칙은 ProtoBuf GitHub repo에 Bazel WORKSPACE
및 BUILD
파일이 포함되어 있기 때문에 사용됩니다.
Bazel 작업 공간이 아니기 때문에 여섯 개의 라이브러리에 new_http_archive을 사용해야합니다. 또한 가치 Bazel transitive dependencies이 (Bazel 문서에서) 내 WORKSPACE
파일에 제공해야한다는 지적 :
Bazel은 작업 공간 파일에 나열된 종속성을 읽습니다. 프로젝트 (A)가 작업 공간 파일에 세 번째 프로젝트 (C)에 대한 종속성을 나열하는 다른 프로젝트 (B)에 의존하는 경우 B 과 C를 프로젝트의 WORKSPACE 파일에 모두 추가해야합니다.
six.BUILD
는 REPO에서 직접 촬영 및 로컬로 저장됩니다
내 BUILD
파일
load("@com_google_protobuf//:protobuf.bzl", "py_proto_library")
py_proto_library(
name = "py",
use_grpc_plugin = True,
deps = [
"@com_google_protobuf//:protobuf_python",
":example_proto",
],
visibility = ["//visibility:public"],
# protoc = "@com_google_protobuf//:protoc",
)
proto_library(
name = "example_proto",
srcs = ["example.proto"],
)
문제의 arrises 때 건물 :
,536,913 (읽기 쉽도록 포맷) 63,210bazel build //proto:py
출력 : 그러나
proto/BUILD:3:1:
no such target '//:protobuf_python':
target 'protobuf_python' not declared in package '' defined by BUILD and referenced by '//proto:py'.
ERROR: Analysis of target '//proto:py' failed; build aborted.
, 내 명령 줄에서 외부 의존성을 구축하는 것은 작동합니다
bazel build @com_google_protobuf//:protobuf_python
출력이 (읽기 쉽도록 잘립니다) :
INFO: Found 1 target...
...
INFO: Elapsed time: 51.577s, Critical Path: 8.63s
protobuf_python
대상이 분명히 드입니다. 벌금과 공공 : (: 평 // 프로토) //에 따라 달라집니다