python - Protobuf,在python3.6中编译后导入报错

标签 python python-3.x protocol-buffers

目录结构:

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/

相关文章:

python - 无法访问带有字符串索引的字典中的字典必须是整数错误

python - 如何仅将某个元素的字典值映射到新的数据框列?

go - 如何在Golang中将从protobuf导入的消息初始化为数组

c# - 如何将 C# 对象列表转换为 Protocol Buffer 列表?

python - 我缺少什么来修复与金融 API 相关的 SSL 错误?

python - libpng 警告 : interlace handling should be turned on when using png_read_image in Python/PyGame

python - Python 中的直角锐角三角形和钝角三角形

html - 美汤不找 table

python-3.x - 如何重用套接字地址python?

protocol-buffers - 如何使用Google Protobuf通过网络发送 float ?