Python : obtenir la version de PROJ installée#
Date de publication initiale : 25 juillet 2023
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.
Avec pyproj#
Si pyproj est installé :
Alors tout est presque trop facile :
Avec les bindings GDAL#
Si GDAL est installée, ainsi que ses bindings Python :
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#
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#
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 :
- que certains des utilitaires packagés avec proj disposent eux d'une option
--version
:cct --version
etgie --version
. Il y a donc une incohérence entre les différents CLI qu'il fait bon de mettre en lumière et résoudre. - que la demande ne date pas d'hier (mais qu'un malheureux bot avait occulté)
- que j'aurais pu creuser davantage quand j'ai regardé comment pyproj se débrouille pour déterminer la version de PROJ
Et surtout que l'open source communautaire, c'est fichtrement vertueux !
Auteur·ice#
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
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