================================
===============================
.. _installing-pybind11:
Installing pybind11
--------------------
To install ``pybind11`` use pip
::
$ pip install pybind11
Or if you are using conda:
::
$ conda install pybind11
If you want to build ``pybind11`` yourself, you can install the dependencies and then run the following command in your source directory:
.. code-block:: bash
$ mkdir build && cd build && cmake .. && make -j$(nproc) && sudo make install
You can also use `conda env export` to create a conda environment with pybind11 and then use `conda env import` to recreate the same environment on a different machine. This will also take care of any dependencies that may have changed over time.
.. note::
``pybind11`` supports C++11 or higher. If you're using an older version of gcc, consider installing `gcc-7` which is known to work well with ``pybind11``: http://linuxcommand.org/lc3_software/How_to_Install_the_C_Compiler_GCC
.. note::
If you're using a different compiler, you can set it manually by passing the ``-DCMAKE_CXX_COMPILER=<path_to_your_compiler>`` flag when running ``cmake``.
For example, if you have `gcc-7` installed in your system and you want to use that, you'd run:
.. code-block:: bash
$ cmake -DCMAKE_CXX_COMPILER=/usr/bin/g++-7 ..
Building pybind11 with python3.6 or higher
------------------------------------------
Since python3.6, ``pybind11`` now uses the `pybind11::embedded` module for building its embedded interpreter. This is a big change and requires some changes to the build system of ``pybind11``.
To compile ``pybind11`` with ``python3.6`` or higher, you need to follow these steps:
1. Clone pybind11 from `github.com/pybind/pybind11`_ and navigate into the source directory.
2. Create a subdirectory named ``build``, run ``cd build``, and then call ``cmake`` with the appropriate flags.
3. Compile ``pybind11`` with ``make -j$(nproc)`` (or use ``-j<num_threads>`` for building with fewer threads).
4. Install ``pybind11`` with ``sudo make install``.
.. note::
If you're using a different compiler, you can set it manually by passing the ``-DCMAKE_CXX_COMPILER=<path_to_your_compiler>`` flag when running ``cmake``.
For example, if you have `gcc-7` installed in your system and you want to use that, you'd run:
.. code-block:: bash
$ cmake -DCMAKE_CXX_COMPILER=/usr/bin/g++-7 ..
.. warning::
The above build instructions assume that you have the appropriate version of python3.6 installed on your system and it is located at ``/usr/local/bin/python3.6``. If this is not the case, please update the path appropriately in the ``CMakeLists.txt`` file.
Also, make sure you have ``libffi-dev`` installed.
.. note::
If you're using Ubuntu or Debian, the above instructions will not work because the ``pybind11`` source code does not include the necessary files to build with Ubuntu/Debian. Instead, you can use the following commands:
.. code-block:: bash
$ cd /opt/python3.6/include/python3.6/
$ python3 -m ensurepip --default-pip
$ python3 -m pip install pybind11
Building pybind11 with python2.7 or higher
------------------------------------------
To compile ``pybind11`` with ``python2.7`` or higher, you need to follow these steps:
1. Clone pybind11 from `github.com/pybind/pybind11`_ and navigate into the source directory.
2. Create a subdirectory named ``build``, run ``cd build``, and then call ``cmake`` with the appropriate flags.
3. Compile ``pybind11`` with ``make -j$(nproc)`` (or use ``-j<num_threads>`` for building with fewer threads).
4. Install ``pybind11`` with ``sudo make install``.
.. note::
If you're using a different compiler, you can set it manually by passing the ``-DCMAKE_CXX_COMPILER=<path_to_your_compiler>`` flag when running ``cmake``.
For example, if you have `gcc-7` installed in your system and you want to use that, you'd run:
.. code-block:: bash
$ cmake -DCMAKE_CXX_COMPILER=/usr/bin/g++-7 ..
.. note::
If you're using Ubuntu or Debian, the above instructions will not work because the ``pybind11`` source code does not include the necessary files to build with Ubuntu/Debian. Instead, you can use the following commands:
.. code-block:: bash
$ cd /opt/python2.7/include/python2.7/
$ python -m ensurepip --default-pip
$ python -m pip install pybind11
.. note::
If you're using python2.7, make sure to also install ``libffi-dev``:
.. code-block:: bash
$ sudo apt-get install libffi-dev
Building with gcc6 and older versions of python
-----------------------------------------------
Python 3.4+ uses the GCC6 compiler by default. However, if you need to build ``pybind11`` with an older version of gcc (e.g., GCC5), you can set the ``CMAKE_CXX_COMPILER`` flag when calling cmake:
.. code-block:: bash
$ mkdir build && cd build && cmake -DCMAKE_CXX_COMPILER=/usr/bin/g++-5 ..
If you're using python2.7 and you want to use an older version of gcc, make sure to also install the necessary dependencies for that version of gcc (e.g., ``libffi-dev``).