Installation

Requirements

  • Python 2.7, 3.2+ or pypy (including the development headers)
  • Libgit2 v0.21.1+
  • cffi 0.8.1+

Warning

One common mistake users do is to choose incompatible versions of libgit2 and pygit2. See below for a reference table of compatible versions. Double check the versions do match before filing a bug report.

Version numbers

The version number of pygit2 is composed of three numbers separated by dots « major.minor.micro », where the first two numbers « major.minor » match the first two numbers of the libgit2 version, while the last number « .micro » auto-increments independently.

As illustration see this table of compatible releases:

libgit2 0.21.1, 0.21.2 0.20.0 0.19.0
pygit2 0.21.0, 0.21.1, 0.21.2, 0.21.3, 0.21.4 0.20.0, 0.20.1, 0.20.2, 0.20.3 0.19.0, 0.19.1

Warning

Backwards compatibility is not guaranteed even between micro releases. Please check the release notes for incompatible changes before upgrading to a new release.

Quick install

To install the latest version of libgit2 system wide, in the /usr/local directory, do:

$ wget https://github.com/libgit2/libgit2/archive/v0.21.2.tar.gz
$ tar xzf v0.21.2.tar.gz
$ cd libgit2-0.21.2/
$ cmake .
$ make
$ sudo make install

See also

For detailed instructions on building libgit2 check https://libgit2.github.com/docs/guides/build-and-link/

Now install pygit2, and then verify it is correctly installed:

$ pip install pygit2
...
$ python -c 'import pygit2'

Troobleshooting

The verification step may fail if the dynamic linker does not find the libgit2 library:

$ python -c 'import pygit2'
Traceback (most recent call last):
  File "<string>", line 1, in <module>
  File "pygit2/__init__.py", line 29, in <module>
    from _pygit2 import *
ImportError: libgit2.so.0: cannot open shared object file: No such file or directory

This happens for instance in Ubuntu, the libgit2 library is installed within the /usr/local/lib directory, but the linker does not look for it there. To fix this call ldconfig:

$ sudo ldconfig
$ python -c 'import pygit2'

If it still does not work, please open an issue at https://github.com/libgit2/pygit2/issues, I would like to know about it.

Build options

LIBGIT2 – If you install libgit2 in an unusual place, you will need to set the LIBGIT2 environment variable before installing pygit2. This variable tells pygit2 where libgit2 is installed. We will see a concrete example later, when explaining how to install libgit2 within a virtual environment.

LIBGIT2_LIB – This is a more rarely used build option, it allows to override the library directory where libgit2 is installed, useful if different from from $LIBGIT2/lib.

libgit2 within a virtual environment

This is how to install both libgit2 and pygit2 within a virtual environment.

This is useful if you don’t have root acces to install libgit2 system wide. Or if you wish to have different versions of libgit2/pygit2 installed in different virtual environments, isolated from each other.

Create the virtualenv, activate it, and set the LIBGIT2 environment variable:

$ virtualenv venv
$ source venv/bin/activate
$ export LIBGIT2=$VIRTUAL_ENV

Install libgit2 (see we define the installation prefix):

$ wget https://github.com/libgit2/libgit2/archive/v0.21.2.tar.gz
$ tar xzf v0.21.2.tar.gz
$ cd libgit2-0.21.2/
$ cmake . -DCMAKE_INSTALL_PREFIX=$LIBGIT2
$ make
$ make install

Install pygit2:

$ export LDFLAGS="-Wl,-rpath='$LIBGIT2/lib',--enable-new-dtags $LDFLAGS"
$ pip install pygit2
$ python -c 'import pygit2'

The run-path

Did you notice we set the rpath before installing pygit2? Since libgit2 is installed in a non standard location, the dynamic linker will not find it at run-time, and lddconfig will not help this time.

So you need to either set LD_LIBRARY_PATH before using pygit2, like:

$ export LD_LIBRARY_PATH=$LIBGIT2/lib
$ python -c 'import pygit2'

Or, like we have done in the instructions above, use the rpath, it hard-codes extra search paths within the pygit2 extension modules, so you don’t need to set LD_LIBRARY_PATH everytime. Verify yourself if curious:

$ readelf --dynamic lib/python2.7/site-packages/pygit2-0.21.3-py2.7-linux-x86_64.egg/_pygit2.so | grep PATH
 0x000000000000001d (RUNPATH)            Library runpath: [/tmp/venv/lib]

Installing on Windows

pygit2 expects to find the libgit2 installed files in the directory specified in the LIBGIT2 environment variable.

In addition, make sure that libgit2 is build in “__cdecl” mode. The following recipe shows you how to do it, assuming you’re working from a bash shell:

$ export LIBGIT2=C:/Dev/libgit2
$ wget https://github.com/libgit2/libgit2/archive/v0.21.2.tar.gz
$ tar xzf v0.21.2.tar.gz
$ cd libgit2-0.21.2/
$ cmake . -DSTDCALL=OFF -DCMAKE_INSTALL_PREFIX=$LIBGIT2 -G "Visual Studio 9 2008"
$ cmake --build . --config release --target install
$ ctest -v

At this point, you’re ready to execute the generic pygit2 installation steps described above.

Installing on OS X

Note

Help wanted to write this section, please make a pull request https://github.com/libgit2/pygit2/pulls