使用 znly/protoc 这个镜像来在docker中生成 protobuffer 和 grpc 文件。
基本用法:
docker run --rm --user `id -u ${USER}` -v `pwd`:`pwd` -w `pwd` znly/protoc \
--plugin=protoc-gen-grpc=/usr/bin/grpc_python_plugin \
--python_out=生成的pb文件路径 --grpc_out=生成的grpc的pb文件路径 \
-I路径 pb文件名
假设我们的项目结构长这样:
api/v1/my_server.proto 放置.pb文件
client/ 放置生成的pb文件,如 xx_pb2.py, xx_pb2_grpc.py
Makefile
首先编辑 Makefile:
client/my_server_pb2.py client/my_server_pb2_grpc.py: api/v1/my_server.proto
@docker run --rm --user `id -u ${USER}` -v `pwd`:`pwd` -w `pwd` znly/protoc \
--plugin=protoc-gen-grpc=/usr/bin/grpc_python_plugin \
--python_out=client --grpc_out=client \
-Iapi/v1 my_server.pb
compile-proto: client/my_server_pb2.py client/my_server_pb2_grpc.py
注意 @
是在调用 make 命令时不输出当前指令。
接下来,我们在命令行执行 make compile-proto
就可以了。
如果说我们想直接生成 .pb.go 文件到proto文件同一个目录下,可以这样写:
api/v1/my_server.pb.go: api/v1/my_server.proto
@docker run --rm --user `id -u ${USER}` -v `pwd`:`pwd` -w `pwd` znly/protoc -I. \
--go_out=plugins=grpc:. api/v1/my_server.proto
如果说我们要生成一个 .pb 文件到 client 目录下:
client/my_server.pb: api/v1/my_server.proto
@docker run --rm --user `id -u ${USER}` -v `pwd`:`pwd` -w `pwd` znly/protoc -I. \
--include_imports --include_source_info \
--descriptor_set_out=client/my_server.pb \
--go_out=plugins=grpc:. api/v1/my_server.proto
扫码关注腾讯云开发者
领取腾讯云代金券
Copyright © 2013 - 2025 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号:粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
Copyright © 2013 - 2025 Tencent Cloud.
All Rights Reserved. 腾讯云 版权所有