.. _install:
Installation
============
.. contents::
.. _cpp_install:
C++ Library
-----------
Dependencies
^^^^^^^^^^^^
``pagmo_plugins_nonfree`` has the following **mandatory** build/runtime dependencies:
* a C++17 capable compiler,
* `CMake `__ 3.20 or later,
* `Boost `__ 1.69 or later,
* `pagmo `__ 2.19.0 or later.
The C++ component builds as a shared library (it is not a header-only library).
Build from source
^^^^^^^^^^^^^^^^^
After making sure dependencies are available on your system, clone the source tree:
.. code-block:: console
$ git clone https://github.com/esa/pagmo_plugins_nonfree.git
$ cd pagmo_plugins_nonfree
Then configure and install the C++ library:
.. code-block:: console
$ mkdir build_cpp
$ cd build_cpp
$ cmake ../ -DPPNF_BUILD_CPP=ON -DPPNF_BUILD_PYTHON=OFF
$ cmake --build . --target install
Useful CMake options include:
* ``CMAKE_BUILD_TYPE``: build type (e.g. ``Release``, ``Debug``),
* ``CMAKE_PREFIX_PATH``: additional dependency lookup paths,
* ``CMAKE_INSTALL_PREFIX``: installation prefix,
* ``PPNF_BUILD_TESTS``: build C++ tests,
* ``PPNF_INSTALL_LIBDIR``: installation directory for libraries.
.. _py_install:
Python
------
Dependencies
^^^^^^^^^^^^
The Python module corresponding to ``pagmo_plugins_nonfree`` is called
``pygmo_plugins_nonfree``.
``pygmo_plugins_nonfree`` has the following **mandatory** runtime dependencies:
* `pygmo `__ (version ``2.19.*``),
* `NumPy `__,
* `cloudpickle `__, a package that extends Python's serialization
capabilities.
For builds from source, the following are also required:
* the C++ library ``pagmo_plugins_nonfree`` installed first,
* `pybind11 `__,
* a compatible Python installation with development headers/modules.
Packages
^^^^^^^^
There are various options for the installation of ``pygmo_plugins_nonfree``:
* `conda `__
* `pip `__
* installation from source.
Conda
^^^^^
Conda packages are provided via conda-forge:
.. code-block:: console
$ conda install -c conda-forge pygmo_plugins_nonfree
Please refer to conda-forge for current platform availability.
pip
^^^
``pygmo_plugins_nonfree`` wheels are published on PyPI:
* `https://pypi.org/project/pygmo_plugins_nonfree/ `__
Install with:
.. code-block:: console
$ pip install pygmo_plugins_nonfree
Current CI status (pip/manylinux)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
The project CI currently validates and builds the following configurations:
* Non-manylinux Python CI:
Linux x86_64 (Python 3.12, 3.13, 3.14), Linux ARM64 (Python 3.14),
macOS ARM64 (Python 3.14), Windows x86_64 (Python 3.14).
* Manylinux wheel CI:
manylinux 2.28 x86_64 and aarch64 for Python 3.11, 3.12, 3.13.
* Manual PyPI publication:
wheels are published via the ``Publish to PyPI (manual)`` workflow dispatch.
At the moment, PyPI publication is driven by the manylinux workflow above.
Installation from source
^^^^^^^^^^^^^^^^^^^^^^^^
To build ``pygmo_plugins_nonfree`` from source you need:
* the C++ library ``pagmo_plugins_nonfree`` installed first,
* `pybind11 `__,
* a compatible Python installation,
* ``pygmo``, ``NumPy`` and ``cloudpickle``.
A typical build sequence is:
.. code-block:: console
$ cd /path/to/pagmo_plugins_nonfree
$ mkdir build_py
$ cd build_py
$ cmake ../ -DPPNF_BUILD_CPP=OFF -DPPNF_BUILD_PYTHON=ON
$ cmake --build . --target install
Pay special attention to ``Python3_EXECUTABLE`` and ``CMAKE_PREFIX_PATH`` when
multiple Python or dependency installations are present.
If needed, you can override the Python package install path via
``PPFN_INSTALL_PATH``.