This is an extension for Python setuptools which uses an installed protobuf
compiler (protoc
) to generate Python sources.
To use this extension, it needs to be installed so it can be imported by other projects' setup.py.
$ python setup.py build
$ python -m pip install .
(If you want to test changes to the extension, you can use python setup.py
develop
.)
from setuptools import setup
setup(
# ...
name='example_project',
# Require this package, but only for setup (not installation):
setup_requires=['protobuf_distutils'],
options={
# See below for details.
'generate_py_protobufs': {
'source_dir': 'path/to/protos',
'extra_proto_paths': ['path/to/other/project/protos'],
'output_dir': 'path/to/project/sources', # default '.'
'proto_files': ['relative/path/to/just_this_file.proto'],
'protoc': 'path/to/protoc.exe',
},
},
)
These steps will generate protobuf sources so they are included when building
and installing example_project
(see above):
$ python setup.py generate_py_protobufs
$ python setup.py build
$ python -m pip install .
source_dir
:This is the directory holding .proto files to be processed.
The default behavior is to generate sources for all .proto files found under
source_dir
, recursively. This behavior can be controlled with options below.
proto_root_path
:This is the root path for resolving imports in source .proto files.
The default is the shortest prefix of source_dir
among [source_dir] +
self.extra_proto_paths
.
extra_proto_paths
:Specifies additional paths that should be used to find imports, in
addition to source_dir
.
This option can be used to specify the path to other protobuf sources,
which are imported by files under source_dir
. No Python code will
be generated for .proto files under extra_proto_paths
.
output_dir
:Specifies where generated code should be placed.
Typically, this should be the root package that generated Python modules should be below.
The generated files will be placed under output_dir
according to the
relative source paths under proto_root_path
. For example, the source file
${proto_root_path}/subdir/message.proto
will be generated as the Python
module ${output_dir}/subdir/message_pb2.py
.
proto_files
:A list of strings, specific .proto file paths for generating code, instead of
searching for all .proto files under source_path
.
These paths are relative to source_dir
. For example, to generate code
for just ${source_dir}/subdir/message.proto
, specify
['subdir/message.proto']
.
protoc
:By default, the protoc binary (the Protobuf compiler) is found by
searching the environment path. To use a specific protoc binary, its
path can be specified. Resolution of the protoc
value is as follows:
If the --protoc=VALUE
flag is passed to generate_py_protobufs
,
then VALUE
will be used.
For example:
$ python setup.py generate_py_protobufs --protoc=/path/to/protoc
options
, it will be used.
(See "Example setup.py configuration," above.)PROTOC
environment variable is set, it will be
used. For example:
For example:
shell
$ PROTOC=/path/to/protoc python setup.py generate_py_protobufs
Otherwise, $PATH
will be searched.