Installing Python package gdal into virtualenv on Linux
GDAL provides nice toolkit for GEO related operations. However, installing it to virtualenv on Linux is not a trivial task.
This recipe describes, how to do that.
note
here I use lowercase gdal for Python package and upper case GDAL for general system wide library.
Requirements
- allow using osgeo libraries (installed via
gdal Python package) into virtualenv - allow installing on Linux Ubuntu
Installation methods
There are multiple methods for installation. One requires compilation and takes few minutes more.
The other is using wheel package of pygdal package and is very quick. Anyway, to create the wheel package one needs to create it once and the creation includes the compilation step anyway.
About GDAL packages and versions
GDAL is a general C(++) based library for GEO related calculations.
GDAL utilities can be installed system-wide what makes shared libraries available, but does not install Python package itself.
GDAL comes in different versions and each Linux distribution may by default install different version.
Python package gdal requires compilation and is not trivial to install on Linux based systems as it expects few environmental variables to be set. This makes installation into virtualenv more difficult.
Each gdal version might assume different version of GDAL and will fail installing if expected version is not present in the system.
Python package pygdal is an alternative to gdal, which installs exactly the same stuff as gdal, but does it in a much more virtualenv friendly manner.
pygdal comes in versions reflecting related GDAL version. So having GDAL version 1.10.1 in the system you shall install pygdal version 1.10.1.
Python package gdal (as well as pygdal) uses root python package named osgeo and has a set of submodules, one being osgeo.gdal.
If needed, other than default versions of GDAL can be installed and used. This is out of scope of this description.
Wheel packages can be cross-compiled, this is also out of scope.
Installing GDAL into system
As pygdal requires GDAL shared libraries to be present, we must install them first.
Assuming GDAL is not yet installed, calling gdal-config will complain and give you a hint how to follow up:
$ gdal-config --version The program 'gdal-config' is currently not installed. You can install it by typing: sudo apt-get install libgdal-dev
Follow the hint and install it:
$ sudo apt-get install libgdal-dev
Each distribution may use different version of GDAL. To find out which we use:
$ gdal-config --version 1.10.1
Now you know, GDAL is installed and the version is 1.10.1 (the version can vary).
Install pygdal from source package (requires compilation)
Currently, pygdal is provided only in tar.gz package, which contains package sources and requires compilation.
Assuming, the version of GDAL is 1.10.1 and that our virtualenv is already activated:
$ pip install pygdal==1.10.1
It may take a while to complete, is it needs numpy, which may also require some compilation. Just wait.
Check, it is installed:
$ pip freeze|grep pygdal pygdal==1.10.1.0
From now on, you may use osgeo package in your Python code as you like in exactly the same manner as if you would install it by gdal Python package.
Creating wheel package for pygdal
Note, that wheel packages must be created for exactly the same architecture, namely, must match:
- CPU architecture
- OS (Linux/Windows)
In our case, it must also match the version of GDAL installed.
Following steps can be done in virtualenv or not, as you like.
First, make sure, wheel package is installed:
$ pip install wheel
Assuming, you have GDAL installed and it has version 1.10.1:
$ pip wheel pygdal==1.10.1.0
and wait, until it completes.
After this, you shall find subdirectory wheelhouse and it shall contain packages with extension `whl`:
$ ls wheelhouse numpy-1.9.1-cp27-none-linux_x86_64.whl pygdal-1.10.1.0-cp27-none-linux_x86_64.whl
Install pygdal from wheel packages
Installation from wheel formatted packages is much faster (a second compared to minutes), as it does not require compilation.
Note, that directory with wheel packages can have any name, we will use just the name wheelhouse.
Activate virtualenv first.
Ensure, you have in wheelhouse directory both required wheel packages (for pygdal and numpy).
Ensure, GDAL is installed and the version matches version of pygdal.
Install pygdal from wheel package:
$ pip install pygdal==1.10.1.0 -f wheelhouse
The -f wheelhouse shall point to the directory with whl files.
There is no need to install numpy, it gets installed automatically.