| Protocol Buffers - Google's data interchange format | 
 | =================================================== | 
 |  | 
 | Copyright 2008 Google Inc. | 
 |  | 
 | This directory contains the Python Protocol Buffers runtime library. | 
 |  | 
 | Normally, this directory comes as part of the protobuf package, available | 
 | from: | 
 |  | 
 |   https://developers.google.com/protocol-buffers/ | 
 |  | 
 | The complete package includes the C++ source code, which includes the | 
 | Protocol Compiler (protoc).  If you downloaded this package from PyPI | 
 | or some other Python-specific source, you may have received only the | 
 | Python part of the code.  In this case, you will need to obtain the | 
 | Protocol Compiler from some other source before you can use this | 
 | package. | 
 |  | 
 | Development Warning | 
 | =================== | 
 |  | 
 | The pure python performance is slow. For better performance please | 
 | use python c++ implementation. | 
 |  | 
 | Installation | 
 | ============ | 
 |  | 
 | 1) Make sure you have Python 3.7 or newer.  If in doubt, run: | 
 |  | 
 |        $ python -V | 
 |  | 
 | 2) Make sure you have Bazel 0.5.4 or later (or CMake 3.5 or later). | 
 |  | 
 | 3) If you do not have setuptools installed, note that it will be | 
 |    downloaded and installed automatically as soon as you run `setup.py`. | 
 |    If you would rather install it manually, you may do so by following | 
 |    the instructions on [this page](https://packaging.python.org/en/latest/tutorials/installing-packages/). | 
 |  | 
 | 4) Build the C++ code, or install a binary distribution of `protoc`.  If | 
 |    you install a binary distribution, make sure that it is the same | 
 |    version as this package.  If in doubt, run: | 
 |  | 
 |        $ protoc --version | 
 |  | 
 | 5) Build and run the tests: | 
 |  | 
 |        $ python setup.py build | 
 |        $ python setup.py test | 
 |  | 
 |    To build, test, and use the C++ implementation, you must first compile | 
 |    `libprotobuf.so` using either [Bazel](../README.md) or [CMake](../src/README.md): | 
 |  | 
 |    On OS X: | 
 |  | 
 |    If you are running a Homebrew-provided Python, you must make sure another | 
 |    version of protobuf is not already installed, as Homebrew's Python will | 
 |    search `/usr/local/lib` for `libprotobuf.so` before it searches the compiled | 
 |    binaries. | 
 |  | 
 |    You can either unlink Homebrew's protobuf or install the `libprotobuf` you | 
 |    built earlier: | 
 |  | 
 |        $ brew unlink protobuf | 
 |  | 
 |    or | 
 |  | 
 |        $ (cd .. && cmake . && make install) | 
 |  | 
 |     On other *nix: | 
 |  | 
 |     You must make `libprotobuf.so` dynamically available. You can either | 
 |     install libprotobuf you built earlier, or set `LD_LIBRARY_PATH`: | 
 |  | 
 |        $ (cd .. && cmake . && make -j20 install) | 
 |  | 
 |     or | 
 |  | 
 |        $ export LD_LIBRARY_PATH=../bazel-bin | 
 |  | 
 |    To build the C++ implementation run: | 
 |  | 
 |        $ python setup.py build --cpp_implementation | 
 |  | 
 |    Then run the tests like so: | 
 |  | 
 |        $ python setup.py test --cpp_implementation | 
 |  | 
 |    If some tests fail, this library may not work correctly on your | 
 |    system.  Continue at your own risk. | 
 |  | 
 |    Please note that there is a known problem with some versions of | 
 |    Python on Cygwin which causes the tests to fail after printing the | 
 |    error:  `sem_init: Resource temporarily unavailable`.  This appears | 
 |    to be a [bug either in Cygwin or in | 
 |    Python](http://www.cygwin.com/ml/cygwin/2005-07/msg01378.html). | 
 |  | 
 |    We do not know if or when it might be fixed.  We also do not know | 
 |    how likely it is that this bug will affect users in practice. | 
 |  | 
 | 6) Install: | 
 |  | 
 |        $ python setup.py install | 
 |  | 
 |    or: | 
 |  | 
 |        $ (cd .. && make install) | 
 |        $ python setup.py install --cpp_implementation | 
 |  | 
 |    This step may require superuser privileges. | 
 |    NOTE: To use C++ implementation, you need to export an environment | 
 |    variable before running your program.  See the "C++ Implementation" | 
 |    section below for more details. | 
 |  | 
 | Usage | 
 | ===== | 
 |  | 
 | The complete documentation for Protocol Buffers is available via the | 
 | web at: | 
 |  | 
 |   https://developers.google.com/protocol-buffers/ | 
 |  | 
 | C++ Implementation | 
 | ================== | 
 |  | 
 | The C++ implementation for Python messages is built as a Python extension to | 
 | improve the overall protobuf Python performance. | 
 |  | 
 | To use the C++ implementation, you need to install the C++ protobuf runtime | 
 | library, please see instructions in the parent directory. |