目录结构:
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但无法解决问题。
最佳答案
有一个开放的 issue 5374在 protobuf github 中关于这个问题。
在解决之前,我使用以下解决方法:在 protoc
运行 sed 脚本(至少适用于 GNU sed
)后,它将添加相对导入。
protoc $PATH/*.proto --python_out=$PROTOC_OUTDIR
sed -i $PROTOC_OUTDIR/*_pb2.py -e 's/^import [^ ]*_pb2/from . \0/'
但这仅当所有文件都位于同一目录中时才有效。将需要更复杂的脚本来处理分布在多个目录中的文件。
关于python - Protobuf,在python3.6中编译后导入报错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55004073/