Protocol Buffers - Google's data interchange format
===================================================

[![Build status](https://storage.googleapis.com/protobuf-kokoro-results/status-badge/linux-python.png)](https://fusion.corp.google.com/projectanalysis/current/KOKORO/prod:protobuf%2Fgithub%2Fmaster%2Fubuntu%2Fpython%2Fcontinuous) [![Build status](https://storage.googleapis.com/protobuf-kokoro-results/status-badge/linux-python_compatibility.png)](https://fusion.corp.google.com/projectanalysis/current/KOKORO/prod:protobuf%2Fgithub%2Fmaster%2Fubuntu%2Fpython_compatibility%2Fcontinuous) [![Build status](https://storage.googleapis.com/protobuf-kokoro-results/status-badge/linux-python_cpp.png)](https://fusion.corp.google.com/projectanalysis/current/KOKORO/prod:protobuf%2Fgithub%2Fmaster%2Fubuntu%2Fpython_cpp%2Fcontinuous) [![Build status](https://storage.googleapis.com/protobuf-kokoro-results/status-badge/macos-python.png)](https://fusion.corp.google.com/projectanalysis/current/KOKORO/prod:protobuf%2Fgithub%2Fmaster%2Fmacos%2Fpython%2Fcontinuous) [![Build status](https://storage.googleapis.com/protobuf-kokoro-results/status-badge/macos-python_cpp.png)](https://fusion.corp.google.com/projectanalysis/current/KOKORO/prod:protobuf%2Fgithub%2Fmaster%2Fmacos%2Fpython_cpp%2Fcontinuous) [![Compat check PyPI](https://python-compatibility-tools.appspot.com/one_badge_image?package=protobuf)](https://python-compatibility-tools.appspot.com/one_badge_target?package=protobuf)

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 preformance please
use python c++ implementation.

Installation
============

1) Make sure you have Python 2.7 or newer.  If in doubt, run:

       $ python -V

2) 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/installing.html#setup-for-installing-packages).

3) 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

4) 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`:

       $ (cd .. && make)

   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
   `../src/.libs`.

   You can either unlink Homebrew's protobuf or install the `libprotobuf` you
   built earlier:

       $ brew unlink protobuf

   or

       $ (cd .. && 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`:

       $ export LD_LIBRARY_PATH=../src/.libs

    or

       $ (cd .. && make install)

   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.

5) 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.
