У нас есть 3 прото-файла, которые зависят друг от друга и находятся в пакете //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
), мы используем imports
, как показано ниже, и правило работает отлично.
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
Импорт полного пути к импортированным прото-файлам (например, import protocol/proto/A.proto
) исправляет это, нодля нас важно, чтобы мы не добавляли полный путь в качестве префикса.Таким образом, мы пытаемся заставить аргумент imports
работать.
У вас есть идея, что может быть причиной и как мы можем обойти это?