簡體   English   中英

Protobuf,python3.6編譯后導入報錯

[英]Protobuf, import error after compilation in python3.6

目錄結構:

Application/
   proto/
     payload.proto
     lab_account.proto
     public_trail.proto
   protocompiled/
     payload_pb2.py
     lab_account_pb2.py

payload.proto 的內容

syntax = "proto3";
import "lab_account.proto";
import "public_trail.proto";

如果我使用命令編譯我的 payload.proto 文件。

 Application⟫ protoc --proto_path=./proto --python_out=./protocompiled payload.proto

編譯后的 payload_pb2.py 沒有所需的導入。 它有這樣的錯誤導入語句。

 import lab_account_pb2 as lab__account__pb2
 import public_trail_pb2 as public__trail__pb2

而不是這個;

 import protocompiled.lab_account_pb2 as lab__account__pb2
 import protocompiled.public_trail_pb2 as public__trail__pb2

也提到, https://github.com/protocolbuffers/protobuf/issues/1491但無法解決問題。

protobuf github 中有一個關於此問題的未解決問題 5374

在解決之前,我使用以下解決方法:在protoc運行一個 sed 腳本(至少適用於 GNU sed )之后,它將添加相對導入。

protoc $PATH/*.proto --python_out=$PROTOC_OUTDIR
sed -i $PROTOC_OUTDIR/*_pb2.py -e 's/^import [^ ]*_pb2/from . \0/'

但這只有在所有文件都在同一目錄中時才有效。 將需要更復雜的腳本來處理分布在多個目錄中的文件。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM