xref: /aosp_15_r20/external/cronet/third_party/protobuf/python/README.md (revision 6777b5387eb2ff775bb5750e3f5d96f37fb7352b)
1*6777b538SAndroid Build Coastguard WorkerProtocol Buffers - Google's data interchange format
2*6777b538SAndroid Build Coastguard Worker===================================================
3*6777b538SAndroid Build Coastguard Worker
4*6777b538SAndroid Build Coastguard WorkerCopyright 2008 Google Inc.
5*6777b538SAndroid Build Coastguard Worker
6*6777b538SAndroid Build Coastguard WorkerThis directory contains the Python Protocol Buffers runtime library.
7*6777b538SAndroid Build Coastguard Worker
8*6777b538SAndroid Build Coastguard WorkerNormally, this directory comes as part of the protobuf package, available
9*6777b538SAndroid Build Coastguard Workerfrom:
10*6777b538SAndroid Build Coastguard Worker
11*6777b538SAndroid Build Coastguard Worker  https://developers.google.com/protocol-buffers/
12*6777b538SAndroid Build Coastguard Worker
13*6777b538SAndroid Build Coastguard WorkerThe complete package includes the C++ source code, which includes the
14*6777b538SAndroid Build Coastguard WorkerProtocol Compiler (protoc).  If you downloaded this package from PyPI
15*6777b538SAndroid Build Coastguard Workeror some other Python-specific source, you may have received only the
16*6777b538SAndroid Build Coastguard WorkerPython part of the code.  In this case, you will need to obtain the
17*6777b538SAndroid Build Coastguard WorkerProtocol Compiler from some other source before you can use this
18*6777b538SAndroid Build Coastguard Workerpackage.
19*6777b538SAndroid Build Coastguard Worker
20*6777b538SAndroid Build Coastguard WorkerDevelopment Warning
21*6777b538SAndroid Build Coastguard Worker===================
22*6777b538SAndroid Build Coastguard Worker
23*6777b538SAndroid Build Coastguard WorkerThe pure python performance is slow. For better performance please
24*6777b538SAndroid Build Coastguard Workeruse python c++ implementation.
25*6777b538SAndroid Build Coastguard Worker
26*6777b538SAndroid Build Coastguard WorkerInstallation
27*6777b538SAndroid Build Coastguard Worker============
28*6777b538SAndroid Build Coastguard Worker
29*6777b538SAndroid Build Coastguard Worker1) Make sure you have Python 3.7 or newer.  If in doubt, run:
30*6777b538SAndroid Build Coastguard Worker
31*6777b538SAndroid Build Coastguard Worker       $ python -V
32*6777b538SAndroid Build Coastguard Worker
33*6777b538SAndroid Build Coastguard Worker2) If you do not have setuptools installed, note that it will be
34*6777b538SAndroid Build Coastguard Worker   downloaded and installed automatically as soon as you run `setup.py`.
35*6777b538SAndroid Build Coastguard Worker   If you would rather install it manually, you may do so by following
36*6777b538SAndroid Build Coastguard Worker   the instructions on [this page](https://packaging.python.org/en/latest/installing.html#setup-for-installing-packages).
37*6777b538SAndroid Build Coastguard Worker
38*6777b538SAndroid Build Coastguard Worker3) Build the C++ code, or install a binary distribution of `protoc`.  If
39*6777b538SAndroid Build Coastguard Worker   you install a binary distribution, make sure that it is the same
40*6777b538SAndroid Build Coastguard Worker   version as this package.  If in doubt, run:
41*6777b538SAndroid Build Coastguard Worker
42*6777b538SAndroid Build Coastguard Worker       $ protoc --version
43*6777b538SAndroid Build Coastguard Worker
44*6777b538SAndroid Build Coastguard Worker4) Build and run the tests:
45*6777b538SAndroid Build Coastguard Worker
46*6777b538SAndroid Build Coastguard Worker       $ python setup.py build
47*6777b538SAndroid Build Coastguard Worker       $ python setup.py test
48*6777b538SAndroid Build Coastguard Worker
49*6777b538SAndroid Build Coastguard Worker   To build, test, and use the C++ implementation, you must first compile
50*6777b538SAndroid Build Coastguard Worker   `libprotobuf.so`:
51*6777b538SAndroid Build Coastguard Worker
52*6777b538SAndroid Build Coastguard Worker       $ (cd .. && make)
53*6777b538SAndroid Build Coastguard Worker
54*6777b538SAndroid Build Coastguard Worker   On OS X:
55*6777b538SAndroid Build Coastguard Worker
56*6777b538SAndroid Build Coastguard Worker   If you are running a Homebrew-provided Python, you must make sure another
57*6777b538SAndroid Build Coastguard Worker   version of protobuf is not already installed, as Homebrew's Python will
58*6777b538SAndroid Build Coastguard Worker   search `/usr/local/lib` for `libprotobuf.so` before it searches
59*6777b538SAndroid Build Coastguard Worker   `../src/.libs`.
60*6777b538SAndroid Build Coastguard Worker
61*6777b538SAndroid Build Coastguard Worker   You can either unlink Homebrew's protobuf or install the `libprotobuf` you
62*6777b538SAndroid Build Coastguard Worker   built earlier:
63*6777b538SAndroid Build Coastguard Worker
64*6777b538SAndroid Build Coastguard Worker       $ brew unlink protobuf
65*6777b538SAndroid Build Coastguard Worker
66*6777b538SAndroid Build Coastguard Worker   or
67*6777b538SAndroid Build Coastguard Worker
68*6777b538SAndroid Build Coastguard Worker       $ (cd .. && make install)
69*6777b538SAndroid Build Coastguard Worker
70*6777b538SAndroid Build Coastguard Worker    On other *nix:
71*6777b538SAndroid Build Coastguard Worker
72*6777b538SAndroid Build Coastguard Worker    You must make `libprotobuf.so` dynamically available. You can either
73*6777b538SAndroid Build Coastguard Worker    install libprotobuf you built earlier, or set `LD_LIBRARY_PATH`:
74*6777b538SAndroid Build Coastguard Worker
75*6777b538SAndroid Build Coastguard Worker       $ export LD_LIBRARY_PATH=../src/.libs
76*6777b538SAndroid Build Coastguard Worker
77*6777b538SAndroid Build Coastguard Worker    or
78*6777b538SAndroid Build Coastguard Worker
79*6777b538SAndroid Build Coastguard Worker       $ (cd .. && make install)
80*6777b538SAndroid Build Coastguard Worker
81*6777b538SAndroid Build Coastguard Worker   To build the C++ implementation run:
82*6777b538SAndroid Build Coastguard Worker
83*6777b538SAndroid Build Coastguard Worker       $ python setup.py build --cpp_implementation
84*6777b538SAndroid Build Coastguard Worker
85*6777b538SAndroid Build Coastguard Worker   Then run the tests like so:
86*6777b538SAndroid Build Coastguard Worker
87*6777b538SAndroid Build Coastguard Worker       $ python setup.py test --cpp_implementation
88*6777b538SAndroid Build Coastguard Worker
89*6777b538SAndroid Build Coastguard Worker   If some tests fail, this library may not work correctly on your
90*6777b538SAndroid Build Coastguard Worker   system.  Continue at your own risk.
91*6777b538SAndroid Build Coastguard Worker
92*6777b538SAndroid Build Coastguard Worker   Please note that there is a known problem with some versions of
93*6777b538SAndroid Build Coastguard Worker   Python on Cygwin which causes the tests to fail after printing the
94*6777b538SAndroid Build Coastguard Worker   error:  `sem_init: Resource temporarily unavailable`.  This appears
95*6777b538SAndroid Build Coastguard Worker   to be a [bug either in Cygwin or in
96*6777b538SAndroid Build Coastguard Worker   Python](http://www.cygwin.com/ml/cygwin/2005-07/msg01378.html).
97*6777b538SAndroid Build Coastguard Worker
98*6777b538SAndroid Build Coastguard Worker   We do not know if or when it might be fixed.  We also do not know
99*6777b538SAndroid Build Coastguard Worker   how likely it is that this bug will affect users in practice.
100*6777b538SAndroid Build Coastguard Worker
101*6777b538SAndroid Build Coastguard Worker5) Install:
102*6777b538SAndroid Build Coastguard Worker
103*6777b538SAndroid Build Coastguard Worker       $ python setup.py install
104*6777b538SAndroid Build Coastguard Worker
105*6777b538SAndroid Build Coastguard Worker   or:
106*6777b538SAndroid Build Coastguard Worker
107*6777b538SAndroid Build Coastguard Worker       $ (cd .. && make install)
108*6777b538SAndroid Build Coastguard Worker       $ python setup.py install --cpp_implementation
109*6777b538SAndroid Build Coastguard Worker
110*6777b538SAndroid Build Coastguard Worker   This step may require superuser privileges.
111*6777b538SAndroid Build Coastguard Worker   NOTE: To use C++ implementation, you need to export an environment
112*6777b538SAndroid Build Coastguard Worker   variable before running your program.  See the "C++ Implementation"
113*6777b538SAndroid Build Coastguard Worker   section below for more details.
114*6777b538SAndroid Build Coastguard Worker
115*6777b538SAndroid Build Coastguard WorkerUsage
116*6777b538SAndroid Build Coastguard Worker=====
117*6777b538SAndroid Build Coastguard Worker
118*6777b538SAndroid Build Coastguard WorkerThe complete documentation for Protocol Buffers is available via the
119*6777b538SAndroid Build Coastguard Workerweb at:
120*6777b538SAndroid Build Coastguard Worker
121*6777b538SAndroid Build Coastguard Worker  https://developers.google.com/protocol-buffers/
122*6777b538SAndroid Build Coastguard Worker
123*6777b538SAndroid Build Coastguard WorkerC++ Implementation
124*6777b538SAndroid Build Coastguard Worker==================
125*6777b538SAndroid Build Coastguard Worker
126*6777b538SAndroid Build Coastguard WorkerThe C++ implementation for Python messages is built as a Python extension to
127*6777b538SAndroid Build Coastguard Workerimprove the overall protobuf Python performance.
128*6777b538SAndroid Build Coastguard Worker
129*6777b538SAndroid Build Coastguard WorkerTo use the C++ implementation, you need to install the C++ protobuf runtime
130*6777b538SAndroid Build Coastguard Workerlibrary, please see instructions in the parent directory.
131