» gRPC快速入门:Python » 3. 创建 proto 文件 » 3.2 生成客户端和服务端代码

生成客户端和服务端代码

接下来,我们需要从 .proto 服务定义文件中生成 gRPC 客户端和服务端接口。

首先,确保已经安装 grpcio-tools 包:

pip3 install grpcio-tools

examples/python/route_guide 目录中,运行以下命令:

python3 -m grpc_tools.protoc -I../../protos --python_out=. --pyi_out=. --grpc_python_out=. ../../protos/route_guide.proto

注意,由于示例目录中已经提供了一个版本的生成代码,运行此命令将重新生成相应的文件,而不是创建新文件。生成的代码文件名为 route_guide_pb2.pyroute_guide_pb2_grpc.py,包含以下内容:

  • route_guide.proto 中定义的消息对应的类
  • route_guide.proto 中定义的服务对应的类
    • RouteGuideStub,客户端可用于调用 RouteGuide RPC
    • RouteGuideServicer,定义了 RouteGuide 服务的待实现接口
  • route_guide.proto 中定义的服务相关函数
    • add_RouteGuideServicer_to_server,将 RouteGuideServicer 添加到 grpc.Server

注意
pb2 中的 2 表示生成的代码遵循 Protocol Buffers Python API 版本 2。版本 1 已过时淘汰。这与 Protocol Buffers 自身语言版本无关,语言版本由 .proto 文件中的 syntax = "proto3"syntax = "proto2" 指定。

生成 gRPC 接口到自定义包路径

要使用自定义包路径生成 gRPC 客户端接口,你可以在 grpc_tools.protoc 命令中使用 -I 参数。此方法允许你为生成的文件指定自定义包名称。

以下是使用自定义包路径生成 gRPC 客户端接口的命令:

python -m grpc_tools.protoc -Igrpc/example/custom/path=../../protos \
  --python_out=. --grpc_python_out=. \
  ../../protos/route_guide.proto

生成的文件将放置在 ./grpc/example/custom/path/ 目录中:

  • ./grpc/example/custom/path/route_guide_pb2.py
  • ./grpc/example/custom/path/route_guide_pb2_grpc.py

使用此设置,生成的 route_guide_pb2_grpc.py 文件可正确地使用自定义包结构导入 protobuf 定义,如下所示:

import grpc.example.custom.path.route_guide_pb2 as route_guide_pb2

通过采用此方法,你可以确保文件将根据指定的包路径正确调用彼此。此方法允许你为 gRPC 客户端接口维护一个自定义的包结构。