说明:
最近刚刚开始接触接口的编写,用的是有关grpc远程调用。我还没太搞明白接口是怎么回事,但我的初步目标可以简单理解为生成两个python文件。比如你的proto文件名是ABC,那么我的目标是生成:ABC_pb2.py 和 ABC_pb2_grpc.py。
本文主要是针对上述目标的proto文件编译的。
首先介绍一下我查到的编译方法,第一种是使用protoc,第二种是使用python编译;但只有python很好的完成了上述任务,因为protoc只生成了一个文件ABC_pb2.py。注意一下,两种方法都是用cmd运行的。
一、那你首先要准备一个proto文件。
我在编译的时候遇到了一个问题,就是proto文件的编写格式。网上搜到的编写格式有一些是这样的
message people{ required string name = 1;
optional int32 height = 2;}
但是我在编译的过程中,他一直报错说‘required’和‘optional’这个设置不能有,于是我删掉以后就编译成功了。我这边的版本是3,不知道是不是版本问题,‘required’和‘optional’可能是旧版本的编写方式吧。
我现在的格式:
// Filename: abc.proto
syntax="proto3";
package abc;
service Action{
rpc hihi(Request) returns (Response){}
}
message Request {
string index = 1;
string ids = 2;
}
message Response{
string impot = 1;
}
二、protoc
使用这种方法你要下载两个东西:1、protobuf , 2、protoc
你最好下载到一个全英文路径的文件夹里,相信我,以后会省很多麻烦。
我没有分享我的安装包,因为不知道是否涉及版权,大家自行寻找吧,社区中蛮多人分享的。
将你下好的protoc.exe放到protobuf的文件夹中。(我为了整洁,新建了一个文件夹把文件放了进去)
然后把你的proto文件和protoc放到同一个文件夹中。
接下来很重要的,你要添加环境变量。
首先右键我的电脑选择属性,选择高级设置-环境变量,找到path,并在后面将你的protoc所在的路径添加进去。
再新建一个protoc_path,将刚才的路径也复制进去。
添加好以后,win+R,输入cmd,打开cmd窗口。
首先将工作目录改为protoc所在的路径,然后输入
protoc --python_out=. ABC.proto
就会出现你要的文件啦。
ps:我的文件名是heatmap_soft_val,把这个换成你的文件名如ABC即可。
三、python编译
python的话,首先你要像刚才一样添加环境变量,路径是你python的路径,注意不要写编译器的路径,是python的路径。
其次,你要下载一些安装包:grpc、grpcio_tools、protobuf
安装方法:在cmd窗口中把路径改为python中pip.exe所在的路径,我的是Scripts文件夹;在输入
pip.exe install protobuf
即可下载包。
当时我下载某一个包的时候有一个提示,意思大概是pip版本较低,
You are using pip version 9.0.1, however version 9.0.3 is available.
You should consider upgrading via the 'python -m pip install --upgrade pip' command.
于是我用cmd运行下面代码就可以了,代码的作用是更新pip的版本。
python -m pip install --upgrade pip
最后打开cmd窗口,把路径切换为python的路径,并且把proto文件放到python文件夹中。
在cmd中输入
python -m grpc_tools.protoc -I. --python_out=. --grpc_python_out=. abc.proto
即可获得你想要的两个文件。
后记:接口已经学会怎么写了,可以正常调用了。其实编译好了这两个文件,剩下的就是写一个服务端文件,写一个客户端文件,两个端都调用我们刚才生成的两个文件。首先运行服务端,相当于开始提供服务,然后再运行客户端,就会传参到服务端,然后再返回结果到客户端,即完成一次调用。具体的两个文件怎么写,我有时间会整理到下一个博客中。
博客整理好了,叫《Python:GRPC接口编写之如何编写服务端与客户端》