Aller au contenu

Python : obtenir la version de PROJ installée#

📆 Date de publication initiale : 25 juillet 2023

icône projection

En butant sur un souci de reconnaissance de SRS lié aux choix éclairés de l'IGN en matière de registre spécifique, j'ai eu besoin de vérifier la version de PROJ installée de façon à pouvoir adapter le comportement du script.
Formulé comme ça, mon candide moi s'est dit :

allez zou, un coup de proj --version ou -V dans un subprocess et on n'en parle plus !

C'est alors que mon surmoi de galérien a pris le dessus !

Je me note donc ça ici, histoire de pas oublier et que ça puisse resservir.

Commenter cet article

Avec pyproj#

logo PyProj

Si pyproj est installé :

pip install pyproj

Alors tout est presque trop facile :

import pyproj

print(pyproj.__proj_version__)

Avec les bindings GDAL#

logo GDAL

Si GDAL est installée, ainsi que ses bindings Python :

pip install gdal

Alors on peut utiliser le package osr (dédié à l'abstraction sur les systèmes de coordonnées) :

from osgeo import osr

print(
    f"{osr.GetPROJVersionMajor()}."
    f"{osr.GetPROJVersionMinor()}."
    f"{osr.GetPROJVersionMicro()}"
)

Avec le binaire proj et une regex#

logo PROJ

Mais si on ne peut compter sur aucune des couches d'abstraction précédentes, alors ça se corse. Il faut appeler l'exécutable de proj et se débrouiller avec la sortie par défaut puisqu'il n'y a pas d'option --version :

> proj
Rel. 8.2.1, January 1st, 2022
usage: proj [-bdeEfiIlmorsStTvVwW [args]] [+opt[=arg] ...] [file ...]

Et qu'est ce qu'on fait quand on a doit chercher une structure de texte dans un texte non formaté ? eh bien on se débat s'exprime à la régulière. Joie.

import re
import subprocess

proj_output = check_output(["proj"], stderr=STDOUT, text=True)
version_match = re.search(r"Rel\. ([0-9.]+)", proj_output):
if version_match:
    print(version_match.group(1))

Mais ça, c'était aujourd'hui#

logo open source

En tout cas, ça valait le coup de demander autour de moi et auprès de mes collègues puisque Loïc Bartoletti a proposé d'intégrer l'option --version à proj ! C'est dans cette Pull Request que ça se passe et on y apprend plein de choses :

Et surtout que l'open source communautaire, c'est fichtrement vertueux !


Auteur#

Julien Moura#

Portrait Julien Moura

Géographe "sigiste" de formation, j'ai travaillé sur différentes thématiques et types de structures : gestion des déchets en milieu urbain à Madagascar, foncier d'intérêt général auprès de l'EPF de La Réunion, organisation et la résilience urbaine face aux risques naturels à Lima pour l'IRD, gouvernance et ouverture des données à Isogeo.

Je travaille désormais à Oslandia.
Féru des dynamiques de contributions, je participe activement à Geotribu depuis fin 2011.

Licence Beerware #

Ce contenu est sous licence Beerware (Révision 42).
Les médias d'illustration sont potentiellement soumis à d'autres conditions d'utilisation.

Réutiliser, citer l'article

Tant que vous conservez cette licence :

  • vous pouvez faire ce que vous voulez de ce contenu
  • si vous rencontrez l'auteur/e un jour et que vous pensez que ce contenu vaut le coup, vous pouvez lui payer un coup en retour

Citer cet article :

"Obtenir la version de PROJ installée en Python" publié par Julien MOURA sur Geotribu - Source : https://geotribu.fr/articles/2023/2023-07-25_python-obtenir-la-version-de-proj-avec-gdal-pyproj-binaire/

Commentaires

Afin de favoriser les échanges constructifs, merci de préférer le pseudonymat à l'anonymat. Pour rappel, l'adresse mail n'est pas exposée publiquement. Consulter la page sur la confidentialité et les données personnelles.
Une version minimale de la syntaxe markdown est acceptée pour la mise en forme des commentaires.
Propulsé par Isso.

Ce contenu est sous licence Beerware Pictogramme BeerWare