logo graph-toolEfficient network analysis

Source Download

Graph-tool is released under the GPLv3. For general installation instructions, please see the included INSTALL file.


Graph-tool was tested extensively only on GNU/Linux and MacOS X systems, but should also be usable on other systems where the below requirements are met.

  • GCC, version 4.6 or above (version 4.8 is recommended). For MacOS X, the clang compiler is recommended.
  • The Boost libraries, version 1.46 or above.
  • Python version 2.7 or above (including version 3 and above).
  • The expat library.
  • The SciPy python module.
  • The Numpy python module.
  • The CGAL C++ geometry library, version 3.5 or above.
  • The sparsehash template library (optional, but recommended).
  • The cairomm, pycairo and matplotlib libraries, used for graph drawing (optional).
  • The Graphviz packaged for graph drawing, with the python bindings enabled (optional, deprecated).

Having installed the above dependencies, the module can be compiled in the usual way:

$ ./configure
$ make

After compilation, the module can be installed in the default Python module directory by running:

$ make install

Memory requirements for compilation

Graph-tool requires large amounts of RAM (~4 GB) during compilation, because it uses lots of template metaprogramming. The supported compiler, GCC, is still not very well optimized for this, which means that even though the program is relatively small, it will still use up lots of RAM during compilation, specially if optimizations are used (and you do want to use them). See for instance GCC bug 12850.

An alternative is to use the clang compiler, which requires about half as much RAM, but tends to generate sightly slower code, and currently lacks OpenMP support.

Parallel algorithms

graph-tool can run several of its algorithms in parallel. It makes use of OpenMP to do this, which provides a straightforwards way of converting serial code into parallel code. OpenMP is an extension to the Fortran, C and C++ languages, which uses compiler directives to achieve automatized code parallelization. Since it uses compiler directives (#pragma in C/C++), it maintains backwards compatibility with compilers which do not support OpenMP, and the code is then compiled cleanly as regular serial code. Thus, support for parallel code in graph-tool is quite optional. If you wish to enable it, just pass the option "--enable-openmp" to the configure script.

Pre-compiled Packages

Debian & Ubuntu

For Debian, add the following lines to your /etc/apt/sources.list,

deb http://downloads.skewed.de/apt/DISTRIBUTION DISTRIBUTION main
deb-src http://downloads.skewed.de/apt/DISTRIBUTION DISTRIBUTION main

where DISTRIBUTION can be any one of

wheezy, sid

For Ubuntu, add the following lines

deb http://downloads.skewed.de/apt/DISTRIBUTION DISTRIBUTION universe
deb-src http://downloads.skewed.de/apt/DISTRIBUTION DISTRIBUTION universe

where DISTRIBUTION can be any one of

raring, quantal, precise, saucy, trusty

Note that if you use the Ubuntu 12.04 (aka 'precise pangolin'), you need to install a newer Boost from this ppa: https://launchpad.net/~mapnik/+archive/boost

After running apt-get update, the package can be installed with

apt-get install python-graph-tool

or if you want to use Python 3

apt-get install python3-graph-tool

If you want to verify the packages, you should use the following public key: 98507F25.
After saving it to a file, you should add it to your list with

apt-key add <key's filename>

Afterwards, you can run apt-key list, which should give you the following details about the key:

pub   4096R/98507F25 2013-10-17 [expires: 2018-10-16]
uid                  Tiago de Paula Peixoto <tiago@skewed.de>
uid                  Tiago de Paula Peixoto <tiago@itp.uni-bremen.de>
sub   4096R/1A7ECE03 2013-10-17 [expires: 2018-10-16]
sub   4096R/23F08CAF 2013-10-17 [expires: 2018-10-16]


An ebuild for graph-tool is included in the default Gentoo repository. Just do

emerge graph-tool

to install it.


Packages for Arch are available in the Arch User Repository. You can install it with yaourt:

yaourt -S python2-graph-tool


yaourt -S python-graph-tool

depending on the python version. Thanks for Daniel Müllner for providing the installation scripts!



A portfile is available for installation in MacOS X systems with Macports. It is included in the standard macports list. Just run the following command to install it:

port install py-graph-tool

If you want to install the latest development version from git, you can use this portfile.


Instructions for installation with Homebrew are available here. (Courtesy of Massimo Menichinelli)

Compiler choice in MacOS X

Make sure you use the same compiler to compile the whole stack (python, boost, etc) or you may lead into problems. In an ideal world, the correct version should be the latest one from the "stock" FSF GCC, however it does not seem to be very well supported in the platform, and will lead to strange segfaults upon loading. The bastardized version from Apple (currently version 4.2) seems to work properly on the platform, but is too outdated to compile graph-tool (i.e. it fails to compile valid C++ code), and is being deprecated. The Clang compiler seems to be the only viable option on the platform, and should therefore be used.

(If possible, a much better option would be to use a less freedom-hating platform in the first place.)

Git Repository

We use Git for source revision control and code sharing. The whole tree can be checked out with the following command:

git clone git://git.skewed.de/graph-tool

For further instructions on how to use Git, see the documentation.

The git public repository can be browsed online here.

The git repository is also mirrored at github and gitorious