ひと月ちょっと前より説明しやすいworkaroundが見えたので書いておきます。実は2年位前のここをそのまま真似たら悪くない結果だったです。
OS:ubuntu18.04
python3(2でもいいと思う)
gobgpd:2.9.0
grpc:pip3でインストール
pip3 install grpcio grpcio-tools
protobuf:pip3でインストール
pip3 install protobuf
gobgpのソースを展開してgobgp-2.9.0ディレクトリに入る
pythonでgobgpのgrpc呼ぶのに必要なファイルを作るここのコマンドの前に、gobgp-2.9.0/apiディレクりのgobgpd.proto attribute.protoでそれぞれ
import "any/any.proto"; import "empty/empty.proto"; import "timestamp/timestamp.proto";
とあるのを
import "google/protobuf/any.proto"; import "google/protobuf/empty.proto"; import "google/protobuf/timestamp.proto";
と書き換える。そのあとに
$ python3 -m grpc_tools.protoc -I./api --python_out=. --grpc_python_out=. api/gobgp.proto api/attribute.proto api/capability.proto
ただしもうgo listを呼ばずそこの部分の-Iは指定してない。
生成された*_pb2.py,*_pb2_grpc.pyがそのまま正常に動いてくれます。
https://github.com/osrg/gobgp/blob/master/tools/grpc/python/add_path.py:titile=tools/grpc/python/add_path.pyとか、modpath.pyとか動いてくれます。(2to3をかます必要はある)
確証もなにもないですけど、経験則的に、grpc, protobufはapt/pip/gitにせよ一貫して同じパッケージシステムで導入するがよいように思いました。venv*1とか使うのがなにかあったらやり直しできるので効率的。
*1:python3だとstandardになった?らしいし