blob: a987c2dac88907623a66070599cd3596abd1310a [file] [log] [blame] [view]
temporal40ee5512008-07-10 02:12:20 +00001Protocol Buffers - Google's data interchange format
jessecd04e9b2015-03-16 15:15:59 -07002===================================================
3
Lily Lia1b3d5e2019-06-06 17:30:50 -07004[![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)
jessecd04e9b2015-03-16 15:15:59 -07005
temporal40ee5512008-07-10 02:12:20 +00006Copyright 2008 Google Inc.
7
8This directory contains the Python Protocol Buffers runtime library.
9
temporalcc930432008-07-21 20:28:30 +000010Normally, this directory comes as part of the protobuf package, available
11from:
12
Feng Xiaoe4288622014-10-01 16:26:23 -070013 https://developers.google.com/protocol-buffers/
temporalcc930432008-07-21 20:28:30 +000014
15The complete package includes the C++ source code, which includes the
16Protocol Compiler (protoc). If you downloaded this package from PyPI
17or some other Python-specific source, you may have received only the
18Python part of the code. In this case, you will need to obtain the
19Protocol Compiler from some other source before you can use this
20package.
21
temporal742e4092008-08-27 19:25:48 +000022Development Warning
23===================
24
Jie Luodec49392020-03-25 15:59:46 -070025The pure python performance is slow. For better preformance please
26use python c++ implementation.
temporal742e4092008-08-27 19:25:48 +000027
temporal40ee5512008-07-10 02:12:20 +000028Installation
29============
30
Yuchen Xie595231d2018-06-26 06:20:53 +0800311) Make sure you have Python 2.7 or newer. If in doubt, run:
temporal40ee5512008-07-10 02:12:20 +000032
Misha Brukman67755702017-05-23 10:33:03 -040033 $ python -V
temporal40ee5512008-07-10 02:12:20 +000034
352) If you do not have setuptools installed, note that it will be
Misha Brukman67755702017-05-23 10:33:03 -040036 downloaded and installed automatically as soon as you run `setup.py`.
temporal40ee5512008-07-10 02:12:20 +000037 If you would rather install it manually, you may do so by following
Misha Brukman67755702017-05-23 10:33:03 -040038 the instructions on [this page](https://packaging.python.org/en/latest/installing.html#setup-for-installing-packages).
temporal40ee5512008-07-10 02:12:20 +000039
Misha Brukman67755702017-05-23 10:33:03 -0400403) Build the C++ code, or install a binary distribution of `protoc`. If
temporal40ee5512008-07-10 02:12:20 +000041 you install a binary distribution, make sure that it is the same
42 version as this package. If in doubt, run:
43
Misha Brukman67755702017-05-23 10:33:03 -040044 $ protoc --version
temporal40ee5512008-07-10 02:12:20 +000045
xiaofeng@google.coma36f1b42013-02-26 17:49:03 +0000464) Build and run the tests:
temporal40ee5512008-07-10 02:12:20 +000047
Misha Brukman67755702017-05-23 10:33:03 -040048 $ python setup.py build
49 $ python setup.py test
jieluo@google.com1eba9d92014-08-25 20:17:53 +000050
Misha Brukman67755702017-05-23 10:33:03 -040051 To build, test, and use the C++ implementation, you must first compile
52 `libprotobuf.so`:
Tamir Dubersteind632bc72015-04-10 15:26:58 -040053
Misha Brukman67755702017-05-23 10:33:03 -040054 $ (cd .. && make)
Tamir Dubersteind632bc72015-04-10 15:26:58 -040055
Misha Brukman67755702017-05-23 10:33:03 -040056 On OS X:
Tamir Dubersteind632bc72015-04-10 15:26:58 -040057
Misha Brukman67755702017-05-23 10:33:03 -040058 If you are running a Homebrew-provided Python, you must make sure another
59 version of protobuf is not already installed, as Homebrew's Python will
60 search `/usr/local/lib` for `libprotobuf.so` before it searches
61 `../src/.libs`.
Tamir Dubersteind632bc72015-04-10 15:26:58 -040062
Misha Brukman67755702017-05-23 10:33:03 -040063 You can either unlink Homebrew's protobuf or install the `libprotobuf` you
64 built earlier:
Tamir Dubersteind632bc72015-04-10 15:26:58 -040065
Misha Brukman67755702017-05-23 10:33:03 -040066 $ brew unlink protobuf
Tamir Dubersteind632bc72015-04-10 15:26:58 -040067
Misha Brukman67755702017-05-23 10:33:03 -040068 or
Tamir Dubersteind632bc72015-04-10 15:26:58 -040069
Misha Brukman67755702017-05-23 10:33:03 -040070 $ (cd .. && make install)
Tamir Dubersteind632bc72015-04-10 15:26:58 -040071
Misha Brukman67755702017-05-23 10:33:03 -040072 On other *nix:
Josh Haberman2bd813b2015-04-09 16:41:58 -070073
Misha Brukman67755702017-05-23 10:33:03 -040074 You must make `libprotobuf.so` dynamically available. You can either
75 install libprotobuf you built earlier, or set `LD_LIBRARY_PATH`:
76
77 $ export LD_LIBRARY_PATH=../src/.libs
78
79 or
80
81 $ (cd .. && make install)
82
83 To build the C++ implementation run:
84
85 $ python setup.py build --cpp_implementation
86
87 Then run the tests like so:
88
89 $ python setup.py test --cpp_implementation
temporal40ee5512008-07-10 02:12:20 +000090
91 If some tests fail, this library may not work correctly on your
92 system. Continue at your own risk.
93
94 Please note that there is a known problem with some versions of
95 Python on Cygwin which causes the tests to fail after printing the
Misha Brukman67755702017-05-23 10:33:03 -040096 error: `sem_init: Resource temporarily unavailable`. This appears
97 to be a [bug either in Cygwin or in
98 Python](http://www.cygwin.com/ml/cygwin/2005-07/msg01378.html).
99
Ian Hunter130bb072016-11-16 17:34:28 +0000100 We do not know if or when it might be fixed. We also do not know
temporal40ee5512008-07-10 02:12:20 +0000101 how likely it is that this bug will affect users in practice.
102
1035) Install:
104
Misha Brukman67755702017-05-23 10:33:03 -0400105 $ python setup.py install
jessecd04e9b2015-03-16 15:15:59 -0700106
Misha Brukman67755702017-05-23 10:33:03 -0400107 or:
jessecd04e9b2015-03-16 15:15:59 -0700108
Misha Brukman67755702017-05-23 10:33:03 -0400109 $ (cd .. && make install)
110 $ python setup.py install --cpp_implementation
temporal40ee5512008-07-10 02:12:20 +0000111
112 This step may require superuser privileges.
Josh Haberman2bd813b2015-04-09 16:41:58 -0700113 NOTE: To use C++ implementation, you need to export an environment
114 variable before running your program. See the "C++ Implementation"
115 section below for more details.
temporal40ee5512008-07-10 02:12:20 +0000116
117Usage
118=====
119
120The complete documentation for Protocol Buffers is available via the
121web at:
122
Feng Xiaoe4288622014-10-01 16:26:23 -0700123 https://developers.google.com/protocol-buffers/
liujisi@google.com9b7f6c52010-12-08 03:45:27 +0000124
125C++ Implementation
126==================
127
liujisi@google.com9b7f6c52010-12-08 03:45:27 +0000128The C++ implementation for Python messages is built as a Python extension to
129improve the overall protobuf Python performance.
130
Manjunath Kudlurcf828de2016-03-25 10:58:46 -0700131To use the C++ implementation, you need to install the C++ protobuf runtime
132library, please see instructions in the parent directory.