【发布时间】:2020-12-12 21:34:27
【问题描述】:
我正在尝试从 containerd API .proto 文件生成工作 Python 模块,可以在此处找到:https://github.com/containerd/containerd/tree/master/api。
不幸的是,containerd 自己的 .proto 文件包含诸如 (in api/events/container.proto) 之类的引用:
import weak "github.com/containerd/containerd/protobuf/plugin/fieldpath.proto";
现在,此导入实际上位于 protobuf/plugin/fieldpath.proto,而不是 (vendor/)github.com/containerd/...。简单的-I ... 在这种情况下不起作用,因为导入使用“github”-绝对路径,而相应的源不在供应商分支内。
在尝试使用生成的 Python 模块时,简单地复制 vendor/github.com/... 中的源代码会导致运行时错误:这是因为现在有两个单独的相同协议元素实例尝试使用相同的协议元素名称向 GRPC 注册,但来自两个不同的 Python 模块。 GRPC Python 运行时因此引发错误并终止。
使用python3 -m grpc.tools.protoc ... 时如何正确解决此问题?
【问题讨论】: