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

Python grpc protobuf stubs generation issue: --grpc_out: protoc-gen-grpc: Plugin failed with status code 1

正如问题所说,我从源代码编译了 grpc 并且还做了 sudo pip install grpcio,但是,which grpc_python_plugin 没有 return 任何东西。这是一个问题,因为 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 没有 return 任何东西,我收到以下错误:

: 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 文件但没有服务程序和存根 类,以及服务器和存根方法。当然,如果出于任何目的想要使用 grpc,这些方法都是必需的。任何帮助将不胜感激。

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

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

  • a) cd grpc(grpc 存储库)
  • 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 环境变量

跟踪的位置之一
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]:

python 的 protoc gRPC 插件默认未安装

$ protoc -I=grpc/protos helloworld.proto --plugin=grpc_python_plugin --python_out=grpc/helloworld --grpc_python_out=grpc/helloworld
protoc-gen-grpc_pythong is not recognized as an internal or external command,
operable program or batch file.
--grpc_python_out: protoc-gen-grpc_python: Plugin failed with status code 1.

安装 protoc-gen-grpclib_pythonprotoc-gen-python_grpc

$ pip install grpclib protobuf

生成您的 python gRPC 存根(将 --grpc_python_out 替换为 --grpclib_python_out

$ protoc -I=grpc/protos helloworld.proto --plugin=grpc_python_plugin --python_out=grpc/helloworld --grpclib_python_out=grpc/helloworld

我遇到了类似的问题(which grpc_cpp_plugin 是空的)。在我的例子中,问题是我没有安装 grpc,我用 brew install grpc.

为我的 OS X 解决了这个问题