Skip to Content

Python pour les Sigistes: comment installer un module externe (geojson, shapely ou gdal/ogr, par exemple) ?

Niveau Débutant
Logiciels utilisés Python
Plateforme Windows | Mac | Linux | FreeBSD

Vous travaillez avec un des SIGs cités dans www.portailsig.org/content/python-geospatial-dialectes-standard-pour-esri-pour-fme-pour-gvsig-etc-et-incomprehensions  et vous voulez utiliser Python puisque c'est le langage de « macros » que le logiciel vous suggère. Les utilisateurs d'ArcGIS peuvent notamment se dire « Tiens, un remplaçant du regretté Avenue ou de VBA ».

Et bien non, car Python, c'est autre chose qu'un langage de macros. C'est un langage de programmation Open Source et multiplateforme qui date de la fin des années 80. C'est un langage interprété (il n'y a pas de compilation au sens de C ou de C++)  et est utilisé dans beaucoup, beaucoup d'autres domaines que les SIGs (qui ne sont qu'une petite application).

La preuve en est qu'avec ArcGIS, Python est installé dans un dossier différent de celui de l'application et qu'il est pleinement fonctionnel sans celle-ci. Ouvrez une invite de commande et tapez Python et à vous la joie de la programmation.

Le langage, déjà riche par lui même, fonctionne par l'adjonction de modules spécialisés en fonction des besoins. Par exemple,  Arcgisscripting est un de ces modules,  mais il y en a des milliers d'autres, dont ceux spécialisés dans les SIGs.

Le dépôt principal de ceux-ci est le Python Package Index ou Pypi en abrégé
pypi.python.org/pypi. Ils sont classés par ordre chronologique de soumission, mais il y a moyen de les regarder par spécialités. Ainsi pour les SIG pypi.python.org/pypi ou pypi.python.org/pypi (2 manières de les voir). Il y a aussi des modules qui ne sont pas sur Pypi comme Mapnik.

Chouette, j'ai trouvé le module qu'il me fallait, mais comment l'installer ?

En pratique, il y a 2 types de modules :

  • ceux qui sont écrits en Python seul;
  • ceux qui sont liés à une bibliothèque externe (en C, par exemple), déjà installée ou compilée avec le module.

Cette dernière catégorie va poser des problèmes aux utilisateurs Windows puisqu'ils n'ont pas de compilateur intégré comme Linux ou Mac OS X.

Il y a aussi des modules exclusivement liés à un OS (PyWin par exemple) et d'autres qui demandent une version minimale de Python (ex. supérieure à la version 2.5, c.a.d 2.6 minimum).

Examinons la procédure avec 2 modules proposés par Sean Gillies, geojson et Shapely.  Le premier est écrit en Python seul, le second nécessite que la librairie C++ GEOS soit préalablement installée. Nous verrons ensuite ce qui se passe avec le module gdal/ogr.

module en Python seul

La démarche classique est

  1. télécharger le fichier  geojson-x.tar.gz 
  2. décompresser le fichier
  3. ouvrir un Shell ou une invite de commande dans le dossier et tapez :

Python setup.py install 

Le module va être construit (build) puis installé (install) dans le dossier site-packages de votre installation Python.

Les démarches modernes

Les développeurs Python ont créé des processus pour simplifier encore plus l'installation avec les commandes easy_install (module setuptools) ou pip (module pip). Une fois ces modules installés la démarche est:

  1. ouvrir un Shell ou une invite de commande et tapez :

 easy_install geojson ou pip install geojson

Ces commandes vont se charger de tout, c'est à dire des phases 1, 2 et 3 de la démarche classique.

S'il y a des dépendances vis-à-vis d'un autre module, elles vont aussi se charger de l'installer préalablement, ce qui n'est pas le cas avec la démarche classique. Elles permettent aussi de gérer les versions du module, mise à jour (update), désinstallation ou choix d'une version spécifique (j'ai toutes les versions du module dans site_packages, mais, pour une raison spécifique, je veux utiliser la version X et pas la dernière installée).

Contrôle du résultat :

utilisation

  1. >>> import geojson
  2. >>> dir(geojson)
  3. ['Feature', 'FeatureCollection', 'GeoJSON', 'GeoJSONEncoder', 'GeometryCollection', 'LineString', 'MultiLineString', 'MultiPoint', 'MultiPolygon', 'Point', 'Polygon', '__builtins__', '__doc__', '__file__', '__name__', '__package__', '__path__', 'base', 'codec', 'crs', 'dump', 'dumps', 'factory', 'feature', 'geometry', 'load', 'loads', 'mapping']
  4. >>>

Certains modules sont aussi disponibles au format compressé .egg. Après téléchargement, leur installation se fait aussi avec easy_install, mais en local (ce sont, en fait, des modules compressés au format ZIP).

easy_install module.egg

module nécessitant la présence d'une bibliothèque externe ou d'un compilateur

Shapely est un module qui nécessite la présence d'une bibliothèque externe. Il faut en effet que GEOS soit préalablement installée. D'autres modules comme gdal/ogr doivent compiler des  librairies écrites en C lors de leur installation, ce qui donnera des fichiers .so ou .dll. Et là, les utilisateurs de Windows sont pénalisés : pas de compilateur disponible en standard. Comment faire alors ?

Utilisateurs Linux ou Mac OS X (ou Windows avec un compilateur disponible):

  1. télécharger, compiler, et installer la librairie GEOS. Il faut au terme du processus qu'elle soit disponible dans le PATH
  2. pip install shapely

Utilisateurs classiques de Windows (sans compilateur disponible):

Les développeurs proposent alors des solutions « clé en main » sous forme de fichiers .exe. C'est le cas de Shapely avec un fichier à télécharger Shapely-x.x.x.win32.exe 

Il comprend le module lui-même et la librairie GEOS compilée sous forme de fichier dll. Le tout sera installé dans les emplacements ad hoc.

Contrôle du résultat :

utilisation

  1. >>> import shapely
  2. >>> dir(shapely)
  3. ['__builtins__', '__doc__', '__file__', '__name__', '__package__', '__path__']
  4. >>> shapely.__path__
  5. ['/Library/Python/2.6/site-packages/Shapely-1.2.8-py2.6.egg/shapely']

Malheureusement pour les utilisateurs Windows, ce n'est pas encore le cas pour tout les modules Python.

Cas particulier: pas de fichier exe (gdal/ogr, par exemple)

Prenons le cas du module gdal/ogr. Sur sa page de téléchargement, il n'y a pas de fichiers exe. Si vous essayez d'utiliser la démarche classique ou avec easy_install ou pip vous allez avoir des problèmes

        running install
        running build
        running build_py
        running build_ext
        building 'osgeo._gdal' extension
        error: Unable to find vcvarsall.bat

Cette dernière instruction vous dit que vous avez besoin d'un compilateur. Pourquoi ?

Si l'on retourne à la page Pypi, il y a une indication

Dependencies
        * libgdal (1.7.0 or greater) and header files (gdal-devel)
        * numpy (1.0.0 or greater) and header files (numpy-devel) (not explicitly required, but many examples and utilities will not work without it)

numpy est disponible au format exe mais libgdal non. C'est en fait la bibliothèque standard de GDAL en C++.

 Il vous faudra donc

  1. compiler la librairie GDAL C++  ou télécharger une version déjà compilée pour Windows ;
  2. créer une variable d'environnement pointant vers C:\gdal\bin ou placer les fichiers se terminant par .dll dans le dossier Python (sous dossier où il y a les dll ou dans site-packages) pour que le module Python retrouve les éléments dont il a besoin;
  3. installer le module Python

Vous trouverez des versions de GDAL compilées dans :

Conclusions

Et voilà, à vous de jouer maintenant. Une fois l'habitude prise, on ne s'en passe plus, vu la variété de modules proposés. Certains sont beaucoup plus compliqués à installer que d'autres, comme ceux liés à la bibliothèque GTK (PyGTK) sur un système autre que Linux, ou les modules scientifiques liés à des bibliothèque en C ou en Fortran. Mais, avec le temps, on arrive toujours par s'en sortir.

Il y a aussi des distributions de Python spécifiques comme celle de Enthought Python (EPD, versions payantes ou libres, multiplateforme) ou Python(xy) (Windows), spécialisées dans le domaine scientifique (les principaux modules scientifiques sont préinstallés avec toutes leurs dépendances).

On peut aussi créer des environnements virtuels, totalement indépendants de l'installation Python, pour tester un, ou des, modules particuliers (module virtualenv et autres). C'est ce qui est préconisé pour le module Mapfish, entre autres (www.mapfish.org/doc/1.2/installation.html). Il y a, en effet, des modules qui peuvent interférer l'un sur l'autre ou nécessiter une version spécifique d'un module. Dans un tel environnement virtuel, on n'installe que ce qui est nécessaire à Mapfish, sans toucher à l'installation standard de Python.

Site officiel : setuptools (easy_install)
Site officiel : pip
Site officiel : geojson
Site officiel : Shapely
Site officiel : gdal/ogr
Site officiel : PyGTK
Site officiel : virtualenv
Site officiel : Enthought Python
Site officiel : Python (xy)
Site officiel : Mapfish

Commentaires

Signalysis

Bonjour,
Je suis sous Windows et j'essaye despéspérément d'installer le module siganalysis-0.3.3.tar.gz...
J'ai téléchargé le fichier. Où l'enregistrer? Je l'ai décompressé, j'ai ouvert l'invite de commande Windows et j'ai tapé "Python setup.py install", mais j'ai une erreur. Je n'arrive pas à l'installer à partir de Python... Et j'ai absolumet besoin de ce module pour finaliser un travail important très bientôt. A quel endroit dois-je enregistrer le ficher compressé ou décompressé?
Pourriez-vous m'aider svp?

Bonjour quelle est l'erreur

Bonjour quelle est l'erreur ?

As tu essayé avec pip comme précisé dans la doc du module ?

Pour ce genre de question, il vaut mieux demander sur notre forum (lié à portailSIG) : www.forumsig.org c'est fait pour ça

pip install lxml erreur:required (vcvarsall.bat)

Bonjour

j'ai essayer d'installer Microsoft Windows SDK for Windows 7 and .NET Framework 3.5 SP1
renommé vcvarsx86_amd64 en vcvarsall.bat et autre... comme recommandé sur des sites en anglais que je comprend difficilement et je tourne en rond.

Mon message innitial était dans python:" Couldn't find a tree builder with the features you requested: lxml. Do you need to install a parser library?"

J'ai pourtant dans: C:\Python34\Lib\site-packages\bs4\builder\_lxml.py
mais il semble ne pas le reconnaitre.

Si vous pouvez me dépanner je suis sous windows7 et Python 3.4

j'ai aussi essayer en installant parse (1.6.6) et requirements-parser
mais sans résultat...
Merci

Désolé, mais je ne suis pas

Désolé, mais je ne suis pas sur Windows et ne saurait pas vous aidez. Je vous suggère d'utiliser les versions "prêtes à l'emploi" pour Windows de Christoph Gohlke lxml

Merci, J'ai pu installer lxml

Merci,
J'ai pu installer lxml (Christoph Gohlke a surement mis à jour hier et j'y ai trouvé la version qui marche pour moi!)
BeautifulSoup4 fonctionne maintenant.
Par contre je ne sais toujours pas installer les packs en: "nom-x.x.x.tar.gz" nécessitant C++ (sous Windows)

Bug Beautiful Soup 4

Merci pour ta réponse mais les deux lxml.whl du site de Christoph Gohlke ne sont pas supporté dans l'invite de commande
avec la commande "pip install lxml" (pip) télécharge toujours la dernière version mais en: "nom-x.x.x.tar.gz"
et la plupart du temps on a la même erreur:Microsoft Visual C++ is required(Unable to find vcrsall.bat)
Donc dans windows (a moins que quelqu’un ai la solution) toujours télécharger le fichier.whl dans c:\Scripts
puis: "pip install fichier.whl"
Windows propose "Microsoft Visual C++ Compiler for Python 2.7"
https://www.microsoft.com/en-us/download/details.aspx?id=44266
il contient trois invite de commande avec un environnement Visual C++ 2008 (32 ou 64 bit) !!!?
Mais pas de changement!
J'ai trouver "lxml-3.5.0.win32-py3.2.exe (md5)" pour Windows mais il ne supporte pas "Python 3.4"

Le Bug Beautiful Soup4 semble avoir une solution problème entre (64 et 32 bit): https://bugs.launchpad.net/beautifulsoup/+bug/1390894
Mais je ne comprend pas? Je n'ai personnellement installé que des applications pour Python 32bit
Si quelqu'un a une idée...

Un grand merci !!!

Bonsoir,

Le moins qu'on puisse dire c'est que ce tuto est vraiment parfait lorsqu'il manque un paquet python sous Linux, grâce à cet article, j'ai pu installer pyhton-shapely et utiliser des plugins QGIS de profil en long !

Encore merci !

Poster un nouveau commentaire

Le contenu de ce champ sera maintenu privé et ne sera pas affiché publiquement.