如何使用用于 tensorflow 的协议缓冲区编译器从 .proto 文件正确地重新生成 python .pb2.py 文件?

How does one properly regenerate python .pb2.py files from .proto files using protocol buffer compiler for tensorflow?

以 incepetion_inference.proto 为例,我尝试使用以下命令重新生成 inception_inference.pb2.py 文件:

协议 inception_inference.proto --python_out=./

比较新生成的文件,inception_inference.pb2.py和原来编译生成的文件,除了license notification,其他都是一样的,底部包含:

import abc
import six
from grpc.beta import implementations as beta_implementations
from grpc.framework.common import cardinality
from grpc.framework.interfaces.face import utilities as face_utilities

class BetaInceptionServiceServicer(six.with_metaclass(abc.ABCMeta, object)):
  """<fill me in later!>"""
  @abc.abstractmethod
  def Classify(self, request, context):
    raise NotImplementedError()

class BetaInceptionServiceStub(six.with_metaclass(abc.ABCMeta, object)):
  """The interface to which stubs will conform."""
  @abc.abstractmethod
  def Classify(self, request, timeout):

以此类推...

我猜 Bazel 构建系统的某些部分将它注入到 .pb2.py 文件中,但我找不到它是在哪里完成的。

有人知道如何正确地重新生成这个文件吗?显然,了解这是生成我自己的 .proto 文件的必要步骤。

谢谢!

尝试

protoc -I ./ --python_out=. --grpc_out=. --plugin=protoc-gen-grpc=`which grpc_python_plugin` ./your.proto

确保你已经安装了 protoc 3.0(C++ 和 python 插件),如果你还没有的话,可能 运行 在 grpcio 上安装 pip。