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

说明:

    最近刚刚开始接触接口的编写,用的是有关grpc远程调用。我还没太搞明白接口是怎么回事,但我的初步目标可以简单理解为生成两个python文件。比如你的proto文件名是ABC,那么我的目标是生成:ABC_pb2.py 和 ABC_pb2_grpc.py。

    这边文章主要是针对上述目标的proto文件编译的。

    首先介绍一下我查到的编译方法,第一种是protoc,第二种是python编译;但只有第二种很好的完成了上述任务,因为第一种只生成了一个文件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

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


猜你喜欢

转载自blog.csdn.net/Wendy_LWZ/article/details/80654703