2017-05-25 40 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