Python對版本的對應即爲苛刻,筆者第一次安裝時遇到了不少坑,好比沒法將proto文件轉換成py文件,轉換了以後文件沒法使用,網上各類各樣的解決辦法都沒有講到重點。其實會出現各類各樣的問題是因爲版本沒有對應——python版本、protobuf庫的版本、protoc.exe的版本必須徹底一致。java
1、安裝protoc.exe(版本3.6.1)python
下載地址 https://pan.baidu.com/s/12rWYAet3fhz2rUTtrrKM0w,提取碼:w987google
(1)protoc.exe 放在C:\Windows\System3中(爲避免安裝probuf期間的各類問題)spa
(2)打開cmd命令,輸入protoc --version能夠查看版本code
2、安裝protobuf庫(特定版本3.6.1)blog
(1)進入python3.6的scripts目錄下,輸入pip install protobuf==3.6.1進行安裝(安裝指定版本庫)ip
(2)安裝完成後,能夠輸入pip list查看版本號utf-8
(3)驗證是否成功:打開cmd,輸入python,輸入import google.protobuf,若是不報錯則安裝成功開發
3、將proto文件轉換成pb2.py文件pycharm
(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文件(以下圖)