Python3.6安裝protobuf模塊+將proto文件轉換成pb2.py文件


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文件(如下圖)

 

 
       


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM