正如问题所说,我从源代码编译了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用于任何目的,这些方法是必要的。任何帮助将不胜感激。
答案 0 :(得分:2)
要解决此错误,请确保在系统上安装了grpc_python_plugin
。
在python平台上pip install grpcio
不安装特定于平台的插件,因此您必须通过以下步骤单独安装它们
cd grpc
(grpc repository)git submodule update --init
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]: