NetKet is a light-weight framework with minimal dependencies on external libraries. Dependencies are discussed below, together with common strategies to install them on your machine. In a nutshell, the only strict requirements are a working MPI C++ compiler, CMake, and a modern Python interpreter.

MPI and CMake

In order to install NetKet you need to have a working C++11 compiler installed on your computer. NetKet relies on MPI to provide seamless parallelism on multiples computing cores.

Below you can find more detailed, platform-dependent steps to install those requirements.


On Mac Os, one of the simplest strategy to get MPI and CMake is to first get and then either do:

brew install cmake open-mpi

to get Open MPI, or if you prefer MPICH :

brew install cmake mpich


On Ubuntu you can get Open MPI and the needed development headers doing:

sudo apt-get install cmake libopenmpi-dev openmpi-bin openmpi-doc

Alternatively, you can have MPICH:

sudo apt-get install cmake libmpich-dev mpich

Other platforms

On other platforms/Linux distributions, it is fairly easy to find pre-compiled packages, for example you can have a look at these installation guidelines: CMake, MPICH.

Optional Python Libraries

It is also suggested to have [IPython][], and matplotlib installed, to fully enjoy our Tutorials and Examples.

pip install matplotlib jupyter

Other Dependencies

NetKet also relies on a few header-only external libraries:

  1. Eigen, one of the best modern C++ library for linear algebra and matrix manipulation

  2. Pybind11, a great library to create Python bindings of existing C++ code

  3. JSON for modern C++, an excellent light-weight library to handle JSON input/output and serialization/deserialization

For your convenience, those three libraries are already included in NetKet, and you don’t need to take further action to download/install them. If you wanted to use another version of the external libraries, you can always link them to your project when manually compiling NetKet. To do so, please have a look at the variables defined in CMakelists.txt.