본문으로 건너뛰기

Protobuf

Protobuf

컴파일

python3 -m pip install protobuf
protoc \
--proto_path=<protoRoot> \
--python_out=<pythonRoot> \
--pyi_out=<pythonRoot> \
<protoFile>
  • <flogs>
    • --proto_path=<path>: import할 다른 protobuf 파일들의 기본 경로
    • --python_out=<path>: *_pb2.py 파일들이 생성될 루트 경로
    • --pyi_out=<path>: *_pb2.pyi 파일들이 생성될 루트 경로

규칙

  • import a/b.proto -> from a import b
    • 따라서 import를 해야하는 경우 파이썬에서 생성된 파일들의 경로를 protobuf 파일들의 경로와 맞춰야할 수 있습니다.

변환

Message <-> Binary

msg = pb.SomeProtoMessage()

# ...

binary_msg = msg.SerializeToString()
msg = pb.SomeProtoMessage()
msg.ParseFromString(binary_msg)

Message <-> JSON

from google.protobuf.json_format import MessageToJson

msg = pb.SomeProtoMessage()

# ...

json_msg = MessageToJson(msg)
from google.protobuf.json_format import Parse

msg = Parse(json_msg, pb.SomeProtoMessage())

Message <-> Dict

from google.protobuf.json_format import MessageToDict

msg = pb.SomeProtoMessage()

# ...

dict_msg = MessageToDict(msg)
from google.protobuf.json_format import ParseDict

msg = ParseDict(dict_msg, pb.SomeProtoMessage())