Python对版本的对应即为苛刻,笔者第一次安装时遇到了很多坑,比如无法将proto文件转换成py文件,转换了之后文件无法使用,网上各种各样的解决办法都没有讲到重点。其实会出现各种各样的问题是由于版本没有对应——python版本、protobuf库的版本、protoc.exe的版本必须完全一致。

一、安装protoc.exe(版本3.6.1)

下载地址 https://pan.baidu.com/s/12rWYAet3fhz2rUTtrrKM0w,提取码:w987

(1)protoc.exe 放在C:\Windows\System3中(为避免安装probuf期间的各种问题)

(2)打开cmd命令,输入protoc --version可以查看版本

二、安装protobuf库(特定版本3.6.1)

(1)进入python3.6的scripts目录下,输入pip install protobuf==3.6.1进行安装(安装指定版本库)

(2)安装完成后,可以输入pip list查看版本号

(3)验证是否成功:打开cmd,输入python,输入import google.protobuf,如果不报错则安装成功

三、将proto文件转换成pb2.py文件

(1)先来试一下手动生成

1)把protoc.exe放到proto文件所在目录下

2)打开proto文件,在首行添加syntax = "proto2";

双引号内填proto2还是proto3是根据开发使用的版本来定的,2和3在字段规则上会有些不一样,具体解释请各自百度

3)打开cmd,cd到proto文件所在目录,输入protoc --python_out=. xxxx.proto(如下图所示),成功后会发现目录下出现了一个pb2.py文件

(2)上面手动转换只适用于proto文件数量少的情况,但是实际上,一个项目会有上百个proto文件,这时就需要用到自动转换了。

1)在桌面上新建pro文件夹,在此目录下新建python文件夹,将protoc.exe放到pro目录下

2)将开发给你的proto文件夹复制到pro目录下

3)去pycharm里编写文件读写的代码(如下图)

作用:在每个proto文件首行添加syntax = "proto2";

 1 import os
2
3 path = 'C:\\Users\\Administrator\\Desktop\\pro\\proto\\' #proto文件夹所在的路径
4 files = os.listdir(path) #将path路径下的所有文件名存入列表files
5 #print(files)
6
7 def delStr(file): #删除文件中不想要的行
8 file_data = ""
9 list1 = ['syntax = "proto2";\n']
10 with open(file, "r", encoding="utf-8") as f:
11 lines = f.readlines()
12 lines=list1+lines #每个文件第一行加上syntax = "proto2";
13
14 with open(file, "w", encoding="utf-8") as w:
15 for line in lines:
16 if 'option java_package' in line or 'option java_outer_classname'in line: #如果这行出现了你不想要的关键字,删除这一行
17 continue
18 w.write(line)
19 f.close()
20
21
22 for root,dirs,files in os.walk(path):
23 for file in files:
24 #print(file)
25 protoname=os.path.join(root, file)
26 print(protoname)
27 if protoname.find('.proto') > -1:
28 delStr(protoname)

4)文件修改好后,还需要转换成pb2.py文件,需要用批处理命令(如下图)

编写好之后,保存为.bat格式,放到pro目录下

5)验证是否成功:先运行读写文件操作的python脚本,然后运行批处理命令,结果如下图,这样就说明成功了(warning不用管)

6)最后就可以把转换好的pb2.py文件(夹)复制到你的python工程中进行使用了,由于python不支持跨文件夹的引用,所以需要在每个文件夹下新建空白的__init__.py文件(如下图)

												

Python3.6安装protobuf模块+将proto文件转换成pb2.py文件的更多相关文章

  1. h5模型文件转换成pb模型文件

      本文主要记录Keras训练得到的.h5模型文件转换成TensorFlow的.pb文件 #*-coding:utf-8-* """ 将keras的.h5的模型文件,转换 ...

  2. Linux中将一个GBK编码的文件转换成UTF-8编码文件

    Linux中将一个GBK编码的文件转换成UTF-8编码文件 使用iconv 命令iconv -f GBK -t UTF-8 file1 -o file2 输出另一个文件,然后再覆盖源文件内容

  3. 把TXT GB2312文件转换成TXT UTF8文件

    /// <summary>        /// 把TXT GB2312文件转换成TXT UTF8文件        /// </summary>        /// < ...

  4. C#:将.csv格式文件转换成.xlsx格式文件

    using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; usin ...

  5. 【转】java将excel文件转换成txt格式文件

    在实际应用中,我们难免会遇到解析excel文件入库事情,有时候为了方便,需要将excel文件转成txt格式文件.下面代码里面提供对xls.xlsx两种格式的excel文件解析,并写入到一个新的txt文 ...

  6. .net amr格式文件转换成mp3格式文件的方法

    前言:winform端对于音频文件的格式多有限制,大多数不支持amr格式的文件的播放.但是,手机端传过来的音频文件大多数是amr格式的文件,所以,要想在winform客户端支持音频文件的播放,可以通过 ...

  7. 在windows 下将 chm 格式的文件 转换成 html 的文件

    有时我们可能需要将 chm 格式的文件 转换成 html 格式的网页文件,这时,如果你使用的是 windows 操作系统,那就可以用 windows 操作系统自带的反编译工具来完成这项任务,具体步骤: ...

  8. 将.lib库文件转换成.a库文件的工具

    分享如下两个链接: 微盘: http://vdisk.weibo.com/s/ztzPTJIC52mz2 百度云盘: http://pan.baidu.com/s/11gTOc 使用方法,解压文件mi ...

  9. protobuf基础类以及python 转换pb2.py文件

    一 protobuf-前端解析js 前端解析思路: 1.问后端要数据模型文件,比如名为MODEL.proto 2.使用谷歌官方的工具生成MODEL.js 3.把项目中引用的MODEL.js 和谷歌官方 ...

随机推荐

  1. 【UG二次开发】 UF_OBJ_ask_name 获取对象名字

    代码 char name[256]; UF_OBJ_ask_name(objTag, name);

  2. 32.qt quick-模仿QQ登录界面实现3D旋转(Rotation、Flipable)

    要想模仿QQ登录界面的3D旋转,我们需要学习Rotation和Flipable.由于没找到QQ的资源图,所以我们以两个图片为例模仿QQ的3D旋转,如下图所示: 最终效果如下所示: 1.Rotation ...

  3. Mysql优化(出自官方文档) - 第二篇

    Mysql优化(出自官方文档) - 第二篇 目录 Mysql优化(出自官方文档) - 第二篇 1 关于Nested Loop Join的相关知识 1.1 相关概念和算法 1.2 一些优化 1 关于Ne ...

  4. qemu-ga windows下的安装及监控开发

    windows安装qemu-ga 虚拟机配置里添加virtio serial端口 #virsh edit instance-name devices里添加下面这段配置, 1 <channel t ...

  5. HashMap 中7种遍历方式的性能分析

    随着 JDK 1.8 Streams API 的发布,使得 HashMap 拥有了更多的遍历的方式,但应该选择那种遍历方式?反而成了一个问题. 本文先从 HashMap 的遍历方法讲起,然后再从性能. ...

  6. CS 面试题目总结(问题+答案)

    开源了一个新的github仓库CS 面试题目总结(问题+答案),主要总结一些CS大厂常见的面试问题,所有的问题与答案参考了网络上的许多博客和github仓库,也希望各位读者能够对这个仓库进行补充,毕竟 ...

  7. Mongo集群搭建

    1.集群角色及架构 在搭建集群之前,需要首先了解几个概念:路由,分片.副本集.配置服务器等 mongos,数据库集群请求的入口,所有的请求都通过mongos进行协调,不需要在应用程序添加一个路由选择器 ...

  8. 敢为人先,从阿里巴巴云原生团队实践Dapr案例,看分布式应用运行时前景

    背景 Dapr是一个由微软主导的云原生开源项目,国内云计算巨头阿里云也积极参与其中,2019年10月首次发布,到今年2月正式发布V1.0版本.在不到一年半的时间内,github star数达到了1.2 ...

  9. 5.15、tomcat下部署JPress

    1.说明: jpress类似于wordpress,wordpress是php语言开发的国外开源软件,jpress是java语言 开发的国内开源软件: 2.下载软件包: [root@slave-node ...

  10. .NET Core如何全局获取用户信息?

    前言 在增删改查中的增和改操作中,我们经常需要更新数据流的创建人和修改人,无论我们项目是基于DDD,抑或是简单仅有服务层,此时我们都需要获取用户信息,那么我们只能将用户标识从控制器层层传递到服务或仓储 ...