README.md revision 11986:c12e4625ab56
1![pybind11 logo](https://github.com/pybind/pybind11/raw/master/docs/pybind11-logo.png)
2
3# pybind11 — Seamless operability between C++11 and Python
4
5[![Documentation Status](https://readthedocs.org/projects/pybind11/badge/?version=master)](http://pybind11.readthedocs.org/en/master/?badge=master)
6[![Documentation Status](https://readthedocs.org/projects/pybind11/badge/?version=stable)](http://pybind11.readthedocs.org/en/stable/?badge=stable)
7[![Build Status](https://travis-ci.org/pybind/pybind11.svg?branch=master)](https://travis-ci.org/pybind/pybind11)
8[![Build status](https://ci.appveyor.com/api/projects/status/riaj54pn4h08xy40?svg=true)](https://ci.appveyor.com/project/wjakob/pybind11)
9
10**pybind11** is a lightweight header-only library that exposes C++ types in Python
11and vice versa, mainly to create Python bindings of existing C++ code. Its
12goals and syntax are similar to the excellent
13[Boost.Python](http://www.boost.org/doc/libs/1_58_0/libs/python/doc/) library
14by David Abrahams: to minimize boilerplate code in traditional extension
15modules by inferring type information using compile-time introspection.
16
17The main issue with Boost.Python—and the reason for creating such a similar
18project—is Boost. Boost is an enormously large and complex suite of utility
19libraries that works with almost every C++ compiler in existence. This
20compatibility has its cost: arcane template tricks and workarounds are
21necessary to support the oldest and buggiest of compiler specimens. Now that
22C++11-compatible compilers are widely available, this heavy machinery has
23become an excessively large and unnecessary dependency.
24
25Think of this library as a tiny self-contained version of Boost.Python with
26everything stripped away that isn't relevant for binding generation. Without
27comments, the core header files only require ~2.5K lines of code and depend on
28Python (2.7 or 3.x) and the C++ standard library. This compact implementation
29was possible thanks to some of the new C++11 language features (specifically:
30tuples, lambda functions and variadic templates). Since its creation, this
31library has grown beyond Boost.Python in many ways, leading to dramatically
32simpler binding code in many common situations.
33
34Tutorial and reference documentation is provided at
35[http://pybind11.readthedocs.org/en/master](http://pybind11.readthedocs.org/en/master).
36A PDF version of the manual is available
37[here](https://media.readthedocs.org/pdf/pybind11/master/pybind11.pdf).
38
39## Core features
40pybind11 can map the following core C++ features to Python
41
42- Functions accepting and returning custom data structures per value, reference, or pointer
43- Instance methods and static methods
44- Overloaded functions
45- Instance attributes and static attributes
46- Arbitrary exception types
47- Enumerations
48- Callbacks
49- Iterators and ranges
50- Custom operators
51- Single and multiple inheritance
52- STL data structures
53- Iterators and ranges
54- Smart pointers with reference counting like ``std::shared_ptr``
55- Internal references with correct reference counting
56- C++ classes with virtual (and pure virtual) methods can be extended in Python
57
58## Goodies
59In addition to the core functionality, pybind11 provides some extra goodies:
60
61- pybind11 uses C++11 move constructors and move assignment operators whenever
62  possible to efficiently transfer custom data types.
63
64- It is possible to bind C++11 lambda functions with captured variables. The
65  lambda capture data is stored inside the resulting Python function object.
66
67- It's easy to expose the internal storage of custom data types through
68  Pythons' buffer protocols. This is handy e.g. for fast conversion between
69  C++ matrix classes like Eigen and NumPy without expensive copy operations.
70
71- pybind11 can automatically vectorize functions so that they are transparently
72  applied to all entries of one or more NumPy array arguments.
73
74- Python's slice-based access and assignment operations can be supported with
75  just a few lines of code.
76
77- Everything is contained in just a few header files; there is no need to link
78  against any additional libraries.
79
80- Binaries are generally smaller by a factor of at least 2 compared to
81  equivalent bindings generated by Boost.Python. A recent pybind11 conversion
82  of PyRosetta, an enormous Boost.Python binding project,
83  [reported](http://graylab.jhu.edu/RosettaCon2016/PyRosetta-4.pdf) a binary
84  size reduction of **5.4x** and compile time reduction by **5.8x**.
85
86- When supported by the compiler, two new C++14 features (relaxed constexpr and
87  return value deduction) are used to precompute function signatures at compile
88  time, leading to smaller binaries.
89
90- With little extra effort, C++ types can be pickled and unpickled similar to
91  regular Python objects.
92
93## Supported compilers
94
951. Clang/LLVM (any non-ancient version with C++11 support)
962. GCC (any non-ancient version with C++11 support)
973. Microsoft Visual Studio 2015 or newer
984. Intel C++ compiler 16 or newer (15 with a [workaround](https://github.com/pybind/pybind11/issues/276))
995. Cygwin/GCC (tested on 2.5.1)
100
101## About
102
103This project was created by [Wenzel Jakob](https://www.mitsuba-renderer.org/~wenzel/).
104Significant features and/or improvements to the code were contributed by
105Jonas Adler,
106Sylvain Corlay,
107Trent Houliston,
108Axel Huebl,
109@hulucc,
110Sergey Lyskov
111Johan Mabille,
112Tomasz Miąsko,
113Dean Moldovan,
114Ben Pritchard,
115Jason Rhinelander,
116Boris Schäling,
117Pim Schellart, and
118Ivan Smirnov.
119
120### License
121
122pybind11 is provided under a BSD-style license that can be found in the
123``LICENSE`` file. By using, distributing, or contributing to this project,
124you agree to the terms and conditions of this license.
125