| # Python setuptools extension | |
| This is an extension for Python setuptools which uses an installed protobuf | |
| compiler (`protoc`) to generate Python sources. | |
| ## Installing | |
| To use this extension, it needs to be installed so it can be imported by other | |
| projects' setup.py. | |
| ```shell | |
| $ python setup.py build | |
| $ python -m pip install . | |
| ``` | |
| (If you want to test changes to the extension, you can use `python setup.py | |
| develop`.) | |
| ## Usage | |
| ### Example setup.py configuration | |
| ```python | |
| 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', | |
| }, | |
| }, | |
| ) | |
| ``` | |
| ### Example build invocation | |
| These steps will generate protobuf sources so they are included when building | |
| and installing `example_project` (see above): | |
| ```shell | |
| $ python setup.py generate_py_protobufs | |
| $ python setup.py build | |
| $ python -m pip install . | |
| ``` | |
| ## Options | |
| - `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: | |
| 1. If the `--protoc=VALUE` flag is passed to `generate_py_protobufs`, | |
| then `VALUE` will be used. | |
| For example: | |
| ```shell | |
| $ python setup.py generate_py_protobufs --protoc=/path/to/protoc | |
| ``` | |
| 2. Otherwise, if a value was set in the `options`, it will be used. | |
| (See "Example setup.py configuration," above.) | |
| 3. Otherwise, if the `PROTOC` environment variable is set, it will be | |
| used. For example: | |
| For example: | |
| ```shell | |
| $ PROTOC=/path/to/protoc python setup.py generate_py_protobufs | |
| ``` | |
| 4. Otherwise, `$PATH` will be searched. |