Python grpc protobuf存根生成问题: - grpc_out:protoc-gen-grpc:插件失败,状态码为1

时间:2016-01-11 03:39:19

标签: python grpc protocol-buffers

正如问题所说,我从源代码编译了grpc并且sudo pip install grpcio编译了grpc,但which grpc_python_plugin并没有返回任何内容。这是一个问题,因为route_guide的grpc python示例要求我运行protoc -I . --python_out=. --grpc_out=. --plugin=protoc-gen-grpc='which grpc_python_plugin' ./route_guide.proto  为了生成python存根。由于which grpc_python_plugin没有返回任何内容,因此出现以下错误:

: program not found or is not executable
--grpc_out: protoc-gen-grpc: Plugin failed with status code 1.

如果我缩短命令我尝试运行到:protoc -I . --python_out=. ./route_guide.proto,它会生成route_guide_pb2.py文件但没有Servicer和Stub类,以及服务器和存根方法。 Ofc,如果想要将grpc用于任何目的,这些方法是必要的。任何帮助将不胜感激。

3 个答案:

答案 0 :(得分:2)

要解决此错误,请确保在系统上安装了grpc_python_plugin。 在python平台上pip install grpcio不安装特定于平台的插件,因此您必须通过以下步骤单独安装它们

  • a)cd grpc(grpc repository)
  • b)git submodule update --init
  • c)make grpc_python_plugin

这将为您构建grpc python插件。现在,找出系统中grpc_python_plugin的位置,我们称之为binary_path

如果binary_path位于$PATH环境变量(echo $PATH)下,那么你就可以了。但是,如果它不在$ PATH变量下,则有两个选项

run_codegen.sh更新为--plugin=protoc-gen-grpc=binary_path 或者,将二进制文件复制到$PATH环境变量

跟踪的其中一个位置

答案 1 :(得分:1)

听起来你/usr/local/bin中没有PATH; make install默认使用/usr/local前缀。或者,编译后grpc_python_plugin应该在bins/opt/

答案 2 :(得分:0)

python -m grpc_tools.protoc --proto_path=. --python_out=. --grpc_python_out=. my_proto.proto

编辑:

显然,gRPC github网站上存在有关此问题的未解决问题。 Protoc似乎与grpc_python_plugin有兼容性问题?我通过安装grpc_tools解决了这个问题,然后使用grpc_tools.protoc代替了protoc

$ pip install grpcio-tools
$ pip install googleapis-common-protos

有用的python教程:https://grpc.io/docs/tutorials/basic/python.html

请参阅协议问题[791和4961]: