Python协议缓冲区,为所有人而设计
项目描述
协议缓冲区,为所有人而设计
动机
你是否因为必须修复由 protoc
生成的绝对导入而感到烦恼?
如果是这样,那么 protoletariat
就是你的工具。
protoletariat
有一个目标:修复由 protoc
生成的Python代码中的损坏的导入。
有关此工具的灵感的讨论,请参阅 https://github.com/protocolbuffers/protobuf/issues/1491。
安装
工件 | 状态 | 安装命令 |
---|---|---|
PyPI包 | pip安装无产阶级 |
|
Conda包 | conda install protoletariat -c conda-forge |
|
Docker镜像 | ∅ | docker pull ghcr.io/cpcloud/protoletariat:latest |
注意:由于 conda-forge
包版本可能落后于其他工件几小时,所以可能需要等待。
用法
protoletariat
被设计为在运行 protoc
之后作为后处理步骤运行。它直接在生成的代码上操作。
示例
以下是如何使用名为 protol
的工具的示例
- 创建一些protobuf文件
// thing1.proto
syntax = "proto3";
import "thing2.proto";
package things;
message Thing1 {
Thing2 thing2 = 1;
}
// thing2.proto
syntax = "proto3";
package things;
message Thing2 {
string data = 1;
}
- 在这些文件上运行
protoc
$ mkdir out
$ protoc \
--python_out=out \
--proto_path=directory/containing/protos thing1.proto thing2.proto
- 在生成的代码上运行
protol
$ protol \
--create-package \
--in-place \
--python-out out \
protoc --proto-path=directory/containing/protos thing1.proto thing2.proto
应该显示包含至少以下行的 out/thing1_pb2.py
模块 diff
-import thing2_pb2 as thing2__pb2
-
+from . import thing2_pb2 as thing2__pb2
工作原理
从高层次来看,protoletariat
将绝对导入转换为相对导入。
然而,它不会将任何绝对导入转换为相对导入。
《protol》工具只会转换由 .proto
文件生成的导入。它通过检查从 proto 文件生成的 FileDescriptorProtos
来完成此操作。
核心重写机制使用一种简化的模式匹配形式实现,该形式查看 Python AST,并为匹配的导入模式调用重写规则。
子命令
protoletariat
为您可能想要用来生成 FileDescriptorSet
字节的每个工具提供了一个子命令
子命令 | 描述 |
---|---|
protoc |
使用 protoc 生成 FileDescriptorSet 字节 |
buf |
使用 buf 生成 FileDescriptorSet 字节 |
raw |
您可以通过文件或直接从 stdin 提供作为 FileDescriptorSet 字节的文件 |
帮助
$ protol
Usage: protol [OPTIONS] COMMAND [ARGS]...
Rewrite protoc or buf-generated imports for use by the protoletariat.
Options:
-o, --python-out DIRECTORY Directory containing protoc or buf-generated Python code [required]
--in-place / --not-in-place Overwrite all relevant files under `--python-out` with adjusted imports [default: not-in-place]
--create-package / --dont-create-package
Recursively create __init__.py files under `--python-out` [default: dont-create-package]
-s, --module-suffixes TEXT Suffixes of Python/mypy modules to process [default: _pb2.py, _pb2.pyi, _pb2_grpc.py, _pb2_grpc.pyi]
--exclude-google-imports / --dont-exclude-google-imports
Exclude rewriting imports prefixed with google/protobuf
-e, --exclude-imports-glob TEXT
Exclude imports matching a glob pattern from being rewritten. Multiple values are allowed
--help Show this message and exit.
Commands:
buf Use buf to generate the FileDescriptorSet blob
protoc Use protoc to generate the FileDescriptorSet blob
raw Rewrite imports using FileDescriptorSet bytes from a file or stdin
项目详情
下载文件
下载您平台的文件。如果您不确定要选择哪个,请了解更多关于 安装软件包 的信息。
源分布
protoletariat-3.2.19.tar.gz (19.7 kB 查看散列)
构建分布
protoletariat-3.2.19-py3-none-any.whl (20.4 kB 查看散列)