Cette article présente le moyen de gérer des libraires python additonnelles avec Pip. Cela permet de ne pas dépendre des outils du système d’exploitation pour gérer les dépendances d’un projet.

Tous les exemples seront données à partir d’une distribution Ubuntu 12.04, mais doivent être facilement transposables à un autre 0S unix.

Installation de pip

Stratégie 1

On installe avec les outils de l’OS, et on utilise pip pour qu’il se mette à jour lui-même :

sudo apt-get install python-pip python-dev build-essential 
sudo pip install --upgrade pip

Si votre OS ne dispose pas d’un paquetage permettant d’installer pip, on peut également passer par easy_install. Sur les debian/ubuntu, easy_install est disponible dans le paquetage python-setuptool.

sudo apt-get install python-setuptools python-dev build-essential 
sudo easy_install pip

Si votre OS ne dispose pas d’un paquetage permettant d’installer pip, on peut également passer par easy_install. Sur les debian/ubuntu, easy_install est disponible dans le paquetage python-setuptool.

Stratégie 2

On utilise virtualenv, qui permet de gérer un environnement de librairie séparé de celui géré par l’OS. Quand on crée un environnement virtuel avec virtualenv, pip est automatiquement installé.

Pour installer virtualenv, on peut utiliser easy_install comme ci-dessus, ou pip si une version est déjà installée.

sudo apt-get install python-setuptools python-dev build-essential 
sudo easy_install virtualenv

Plus de renseignements sur virtualenv dans la documentation.

Installer une librairie avec pip.

L’utilisation basique de pip est très simple.

Pour installer pour tout l’OS:

sudo pip install librairie
sudo pip install numpy # par exemple

Pour installer dans un environnement virtualenv, c’est la même chose mais on peut se passer du sudo.

Que fait pip ?

Quand on demande à pip d’installer une librairie, voici les étapes que suit l’outil :

  1. téléchargement sur Pypi de la librairie demandée.
  2. Désarchivage de la librairie.
  3. Compilation de la librairie.
  4. Installation de la librairie

Les problèmes éventuels

Le problème le plus fréquent est l’absence d’une dépendance de compilation de la librairie que l’on veut installer, ce qui entraîne l’échec de la compilation.

Si il existe une version packagée de la librairie sur votre OS ubuntu/debian, on peut utiliser la définition du paquetage pour installer les dépendances de construction du paquetage, et donc de la librairie.

Par exemple, pour installer numpy :

sudo apt-get build-dep python3-numpy
Lecture des listes de paquets... Fait
Construction de l'arbre des dépendances       
Lecture des informations d'état... Fait
Choix de « python-numpy » comme paquet source à la place de « python3-numpy »
Les NOUVEAUX paquets suivants seront installés :
  debhelper dh-apparmor docutils-common gfortran gfortran-4.7 html2text libblas-dev libgfortran-4.7-dev libjs-jquery libjs-sphinxdoc libjs-underscore liblapack-dev libpython-all-dbg libpython-all-dev
  libpython-dbg libpython2.7-dbg libpython3-all-dbg libpython3-all-dev libpython3-dbg libpython3-dev libpython3.3-dbg libpython3.3-dev po-debconf python-all python-all-dbg python-all-dev python-dbg
  python-docutils python-jinja2 python-nose python-pygments python-roman python-sphinx python-tz python2.7-dbg python3-all python3-all-dbg python3-all-dev python3-dbg python3-dev python3-nose python3-tz
  python3.3-dbg python3.3-dev sphinx-common
0 mis à jour, 45 nouvellement installés, 0 à enlever et 12 non mis à jour.
Il est nécessaire de prendre 78,0 Mo dans les archives.
Après cette opération, 196 Mo d'espace disque supplémentaires seront utilisés.
Souhaitez-vous continuer [O/n] ?

Cela entraîne l’installation de tous les paquetages nécessaires à la compilation du paquetage python-numpy. Il suffit ensuite d’installer numpy avec pip:

sudo pip install numpy

Si cela ne suffit pas, il n’existe alors pas de recettes miracles : il faut regarder les messages d’erreur et trouver la librairie manquante.

Attention également si votre OS est trop ancien, les dépendances du paquetage peuvent ne pas être à jour.