SigQuébec

La cohabitation de Python v2 et v3.

Depuis que vous avez ArcGIS Pro et ArcGIS Desktop sur votre ordinateur, vous avez des problèmes à exécuter la bonne version de l’interpréteur Python pour vos scripts? Et bien moi aussi, regardons de plus près ce qui se passe.

Lors de l’installation d’ArcGIS Desktop, la version de Python 2.7 est installée. Lors de l’installation d’ArcGIS Pro, la version 3.4 de Python est installée. Comme mentionné dans mes billets précédents, il y a quelques différences de syntaxe entre les 2 version (exemple la méthode « print ») et le module ArcPy d’ArcGIS Desktop est différent de celui d’ArcGIS Pro. Donc, les 2 ArcGIS utilisent une version différente de Python et ceci cause quelques problèmes.

Par défaut, la version de l’interpréteur Python utilisée est la dernière installée. Donc, si on a installé ArcGIS Pro après ArcGIS Desktop, c’est la version 3.4 de Python qui s’exécute (Il faut avoir fait l’installation de Python pour ArcGIS Pro). Dans ce cas, les scripts pour ArcGIS Desktop en version 2.7 ne fonctionnent plus.

Dernièrement j’ai trouvé un article, sur internet, qui explique comment faire cohabiter 2 versions de Python sur le même ordinateur. Notre problème ne semble pas unique aux logiciels Esri. Voici l’article en question : http://blog.python.org/2011/07/python-launcher-for-windows_11.html. Après avoir lu ce dernier, j’ai fait quelques tests et voici mes résultats avec les produits Esri: https://youtu.be/yeGvjH3WxQo

 

 

Martin

Écrit par Martin Couture
Dernière mise à jour: 22 Juin 2016 - 4:48pm

Migration de Python 2 à Python 3, le module ArcPy.mapping.

Bonjour, un autre ajustement à faire pour convertir vos scripts Python en version 2.x vers 3.x. En tout cas, si vous utilisez ArcGIS Pro et le module arcpy.mapping.

À partir de ArcGIS Pro, le module mapping fait place au module mp. Pour l’utilisation de base, c’est assez facile, on a qu’à changer arcpy.mapping pour arcpy.mp.

Plus loin dans le module, qu’est-ce que cela implique ?

  • Évidemment, il faudra pointer vers un document .aprx plutôt que .mxd lorsque l’on veut accéder à un projet. Il est possible d’utiliser un document .mxd dans le module mp et cela se fait par l’importation avec la méthode importMapDocument.

 

  • Comme l’environnement change entre ArcGIS Desktop et ArcGIS Pro ceci implique de nouveaux objets comme Map, MapFrame, Layout et Camera. Comme ArcGIS Pro intègre le 3D, l’objet Camera est utilisé pour contrôler le point de vue. En mode 2D, il est utilisé pour contrôler l’échelle et l’étendue.

 

  • Les notions de listes sont des méthodes sur les objets. Donc, au lieu de mettre en paramètre le projet et le bloc de données pour la méthode ListLayers, il suffit d’utiliser cette méthode à l’objet qui lui correspond, soit l’objet Map. Le code devient beaucoup plus facile à comprendre et à construire aussi. Le même principe s’applique concernant les fonctions d’exportation des objets Layout et MapFrame et sur la gestion des couches des objets Map et LayerFile.

 

Exemple : map.listLayers() au lieu de arcpy.mapping.ListLayers(mxd, df).

 

Il est possible de découvrir Arcpy.mp via cette page :http://pro.arcgis.com/fr/pro-app/arcpy/mapping/migratingfrom10xarcpymapping.htm

 

Bon code!

 

Martin

 

Écrit par Martin Couture
Dernière mise à jour: 18 Mai 2016 - 11:12am

Passage à Python 3, la suite…les modules String et urllib

Bonjour, lors de mon dernier billet, je vous ai parlé du passage de Python 2 à Python 3. Il est vrai que la syntaxe de programmation n’est pas très différente d’une version à l’autre. Cependant, il faut aussi prendre en considération l’évolution des modules internes (installés avec Python 3.x).

 

Lors de la transition d’un de mes scripts, je me suis rendu compte des changements suivants.

Concernant le module String, il y a 2 manières de l’utiliser en version 2.

  • Soit avec le nom du module et passer la variable texte en paramètre.

Exemple : NombredeA = String.count(« Allô », « a »)

  • Soit avec la variable texte suivie d’une méthode du module String.

Exemple : NombredeA = « Allô ».count(« a »)

Dans le module String de Python 3, seulement la dernière syntaxe est utilisable, la première n’existe plus.

 

Concernant le module urllib qui sert à ouvrir une url dans Python. Il y a aussi des changements entre la version 2 et 3.

  • En version 2, il faut utiliser la syntaxe suivante pour ouvrir une url

Exemple : Lien = urllib.urlopen(url)

  • En version 3, c’est ceci

Exemple : urllib.request.urlopen(url)

 

Ce sont mes trouvailles pour l’instant. D’autres changements suivront probablement dans les prochains billets.

 

Martin

 

Écrit par Martin Couture
Dernière mise à jour: 16 Mai 2016 - 11:07am

Pages

S'abonner à SigQuébec
Vous avez du contenu à publier sur SigQuébec?

Communiquez avec le Webmestre.