================================ =============================== .. _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``).