2017-05-25 84 views
1

这可能吗? AFAICT没有内置py_proto_library规则,并试图用我自己的genrule这样的:用Bazel为Python构建协议缓冲区

genrule(
    name = "my_proto", 
    srcs = ["my.proto"], 
    outs = ["my_pb2.py", "my_pb2_grpc.py"], 
    cmd = "python -m grpc_tools.protoc --python_out=$(@D) --grpc_python_out=$(@D) $<" 
) 
py_binarydeps

失败'//:my_proto' does not have mandatory provider 'py'.

+0

[问题8079](https://github.com/grpc/grpc/issues/8079)是gRPC内部正式支持的问题。 –

回答

2

应该做工精细滚动自己的原文件,就像你”重新做,你只需要将它们添加到py_binarysrcs(而不是deps)。

deps仅适用于py_library s(如果您愿意,也可以将.py包装在py_library中,然后让二进制文件取决于此)。

+0

哦,有趣的是,我没有意识到规则可以在'srcs'属性中进行,我认为它必须是源文件。 'srcs'和'deps'在这里有什么区别? – Alec

+0

'srcs'是一个Python源文件的列表(扩展名为.py的文件),所以你的genrule的输出是合格的。 'deps'是一个'py_library'列表,很少有“信息包”。例如,假设您有一个读取.csv文件的库。您可以使用.py源文件创建一个py_library,并在该.csv文件上创建一个数据依赖关系,然后,如果py_binary依赖于该库,那么它也能够查找该.csv文件。 – kristina