Betterproto Setuptools plugin¤
Introduction¤
A modern setuptools
plugin to generate Python
files from proto files using betterproto.
This plugin is based on
repo-config
's
grpc_tools
plugin.
Supported Platforms¤
The following platforms are officially supported (tested):
- Python: 3.11
- Operating System: Ubuntu Linux 20.04
- Architectures: amd64, arm64
Quick Start¤
To add automatic betterproto code generation to your project, you need to add
this package to your build-dependencies in the pyproject.toml
file, for
example:
[build-system]
requires = [
"setuptools == 68.1.0",
"setuptools-betterproto == 0.1.0",
]
build-backend = "setuptools.build_meta"
This uses a default configuration as follows:
proto_path
: This is the root directory where the proto files are located. By default, it is set to.
.proto_glob
: This is the glob pattern to match the proto files. The search is done recursively. By default, it is set to*.proto
.include_paths
: This is a list of paths to be added to the protobuf compiler's include path. By default, it is set to[]
, but theproto_path
directory is always automatically added.out_path
: This is the directory where the generated Python files will be placed. By default, it is set to.
.
These defaults can be changed via the pypackage.toml
file too. For example:
[tool.setuptools_betterproto]
proto_path = "proto"
include_paths = ["api-common-protos"]
out_path = "src"
You should add betterproto as a dependency too, for example:
Once this is done, the conversion of the proto files to Python files should be automatic. Just try building the package with:
A new command to generate the files will be also added to setuptools
, you can
run it manually with:
You can also pass the configuration options via command line for quick testing,
try passing --help
at the end of the command to see the available options.
Contributing¤
If you want to know how to build this project and contribute to it, please check out the Contributing Guide.
Similar projects¤
setuptools-proto
: We didn't use this project because it seems a bit inactive and not widely used. It also seems to need some configuration as code, which we wanted to avoid.