This package depends on several libraries (the number varies according to which modules you want to use).

Basic dependencies#

Regardless of your needs, the following libraries are required:

Though NNGT implements a default (limited) backend, installing one of the following libraries is highly recommended to do some proper network analysis:

Additionnal dependencies#

  • matplotlib (optional but will limit the functionalities if not present)

  • shapely for complex spatial embedding

  • peewee (> 3) for database features


If they are not present on your computer, pip will directly try to install scipy and numpy. However, if you want advanced network analysis features, you will have to install the graph library yourself (only networkx can be installed directly using pip)

Simple install#


Install the requirements (through apt on debian/ubuntu/mint, pacman and trizen on arch-based distributions, or yum on fedora/centos. Otherwise you can also install the latest versions via pip:

pip install --user numpy scipy matplotlib networkx

To install the last stable release, just use:

pip install --user nngt

Under most linux distributions, the simplest way to get the latest version of NNGT is to install to install both pip and git, then simply type into a terminal:

pip install --user git+


I recommend using Homebrew or Macports with which you can install all required features to use NEST and NNGT with graph-tool. The following command lines are used with python 3.7 but you can use any python >= 3.5 (just replace all 37/3.7 by the desired version).


brew tap homebrew/core
brew tap brewsci/science

brew install gcc-8 cmake gsl autoconf automake libtool
brew install python

if you want nest, add

brew install nest --with-python

(note that setting --with-python=3 might be necessary)


sudo port select gcc mp-gcc8 && sudo port install gsl +gcc8
sudo port install autoconf automake libtool
sudo port install python37 pip
sudo port select python python37
sudo port install py37-cython
sudo port select cython cython37
sudo port install py37-numpy py37-scipy py37-matplotlib py37-ipython
sudo port select ipython ipython-3.7
sudo port install py-graph-tool gtk3

Once the installation is done, you can just install:

export CC=gcc-8
export CXX=gcc-8
pip install --user nngt


It’s the same as Linux for windows users once you’ve installed Python and pip, but NEST won’t work.


igraph can be installed on windows if you need something faster than networkx.

Using the multithreaded algorithms

Install a compiler (the default msvc should already be present, otherwise you can install VisualStudio) before you make the installation.

In case of problems with msvc:

  • install MinGW or MinGW-W64

  • use it to install gcc with g++ support

  • open a terminal, add the compiler to your PATH and set it as default: e.g.

    set PATH=%PATH%;C:\MinGW\bin
    set CC=C:\MinGW\bin\mingw32-gcc.exe
    set CXX=C:\MinGW\bin\mingw32-g++.exe
  • in that same terminal window, run pip install --user nngt

Local install#

If you want to modify the library more easily, you can also install it locally, then simply add it to your PYTHONPATH environment variable:

cd && mkdir .nngt-install
cd .nngt-install
git clone .
git submodule init
git submodule update
nano .bash_profile

Then add:

export PYTHONPATH="/path/to/your/home/.nngt-install/src/:PYTHONPATH"

In order to update your local repository to keep it up to date, you will need to run the two following commands:

git pull origin master
git submodule update --remote --merge


The configuration file is created in ~/.nngt/nngt.conf after you first run import nngt in python. Here is the default file:

# NNGT configuration file #

## default backend       -----------------------------------------------------

# library that will be used in the background to handle graph generation
# (choose among "graph-tool", "igraph", "networkx", or "nngt"). Note that only
# the 3 first options will allow full graph analysis features while only the
# last one allows for fully distributed memory on clusters.

backend = graph-tool

## Matplotlib backend --------------------------------------------------------

# Uncomment and choose among your available backends.
# See for details

#mpl_backend = Qt5Agg

# use TeX rendering for axis labels
use_tex = False

# color library either matplotlib or seaborn
color_lib = matplotlib

# palette to use
palette_continuous = magma
palette_discrete = Set1

## Settings for database    -------------------------------------------------

use_database = False

# use a database (by default, will be stored in SQLite database)
db_to_file = False
db_name    = main
#db_folder  = ~/.local/state/nngt/database/

# database url if you do not want to use a SQLite file
# example of real database url: db_url = mysql://user:password@host:port/my_db
# db_url = mysql:///nngt_db

## Settings for data logging -------------------------------------------------

# which messages are printed? (see logging module levels:
# set to INFO or below to add the config messages on import
# set to WARNING or above to remove the messages on import
log_level = WARNING

# write log to file?
log_to_file = True
# if True, write to default folder
#log_folder = ~/.local/state/nngt/log/

## Multithreaded/MPI algorithms ----------------------------------------------

# C++ algorithms using OpenMP are compiled and imported using Cython if True,
# otherwise regular numpy/scipy algorithms are used.
# Multithreaded algorithms should be prefered if available.

multithreading = True

# If using MPI, current MT or normal functions will be used except for the
# distance_rule algorithm, which will be overloaded by its MPI version.
# Note that the MPI version is not locally multithreaded.

mpi = False

## Third party libraries -----------------------------------------------------

# NNGT uses some 3rd party libraries for neuroscience and geospatial
# applications. Because these use compiled code, it can sometime lead to
# unexpected issues. You can prevent them from being loaded by setting their
# load option to False if you encounter such issues.

# try to load NEST on import

load_nest = True

# try to load geospatial tools on import

load_gis = True

It can be necessary to modify this file to use the desired graph library, but mostly to correct problems with GTK and matplotlib (if the plot module complains, try Gtk3Agg and Qt4Agg/Qt5Agg).

Using NEST#

If you want to simulate activities on your complex networks, NNGT can directly interact with the NEST simulator to implement the network inside PyNEST. For this, you will need to install NEST with Python bindings, which requires:

  • the python headers (python-dev package on debian-based distribs)

  • autoconf

  • automake

  • libtool

  • libltdl

  • libncurses

  • readlines

  • gsl (the GNU Scientific Library) for many neuronal models