Python:如何将proto文件编译为python文件

说明:

    最近刚刚开始接触接口的编写,用的是有关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放到同一个文件夹中。

Python:如何将proto文件编译为python文件_第1张图片

Python:如何将proto文件编译为python文件_第2张图片

    接下来很重要的,你要添加环境变量。

    首先右键我的电脑选择属性,选择高级设置-环境变量,找到path,并在后面将你的protoc所在的路径添加进去。

    Python:如何将proto文件编译为python文件_第3张图片

Python:如何将proto文件编译为python文件_第4张图片

再新建一个protoc_path,将刚才的路径也复制进去。

Python:如何将proto文件编译为python文件_第5张图片

    添加好以后,win+R,输入cmd,打开cmd窗口。

    首先将工作目录改为protoc所在的路径,然后输入

    protoc --python_out=. ABC.proto

    就会出现你要的文件啦。

    ps:我的文件名是heatmap_soft_val,把这个换成你的文件名如ABC即可。

Python:如何将proto文件编译为python文件_第6张图片

 

三、python编译

    python的话,首先你要像刚才一样添加环境变量,路径是你python的路径,注意不要写编译器的路径,是python的路径。

    Python:如何将proto文件编译为python文件_第7张图片

    其次,你要下载一些安装包: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文件夹中。

    Python:如何将proto文件编译为python文件_第8张图片

    在cmd中输入

    python -m grpc_tools.protoc -I. --python_out=. --grpc_python_out=. abc.proto

    即可获得你想要的两个文件。

 

后记:接口已经学会怎么写了,可以正常调用了。其实编译好了这两个文件,剩下的就是写一个服务端文件,写一个客户端文件,两个端都调用我们刚才生成的两个文件。首先运行服务端,相当于开始提供服务,然后再运行客户端,就会传参到服务端,然后再返回结果到客户端,即完成一次调用。具体的两个文件怎么写,我有时间会整理到下一个博客中。

博客整理好了,叫《Python:GRPC接口编写之如何编写服务端与客户端》

 

你可能感兴趣的:(python)