Migration de Python de la version 10.x vers ArcGIS Pro

Python ne s’utilise pas de la même manière dans ArcGIS Pro et les autres produits ArcGIS, notamment ArcGIS Desktop, ArcGIS Server et ArcGIS Engine.

L’outil de géotraitement Analyser les outils pour Pro peut servir à mettre en évidence les problèmes qui pourraient empêcher le code Python ou les outils de géotraitement Python de fonctionner. L’outil Analyser les outils pour Pro fait appel à l’utilitaire Python 2to3 pour tout problème potentiel de migration et identifier les outils et les fonctionnalités qui n’ont pas migré vers ArcGIS Pro.

Modifications des fonctions dans ArcPy

La plupart des outils de géotraitement resteront disponibles dans ArcGIS Pro, à l’exception de quelques-uns. Parmi ces exceptions, on compte les boîtes d’outils Coverage, Parcel Fabric, Schematics et Tracking Analyst. Les outils supplémentaires d'autres boîtes à outils ne sont pas disponibles non plus. Pour obtenir une liste exhaustive, reportez-vous à la liste des outils non pris en charge dans ArcGIS Pro.

Le module arcpy.mapping a été supprimé et remplacé par un module arcpy.mp dans ArcGIS Pro pour prendre en charge les workflows de cartographie dans ArcGIS Pro.

Le module arcpy.na comprend également des modifications, dont beaucoup portent sur le remplacement de arcpy.mapping par arcpy.mp.

Mise à niveau vers Python 3

ArcGIS Pro utilise Python 3. Il s’agit d’un changement de taille par rapport aux autres produits ArcGIS, notamment ArcGIS Desktop, ArcGIS Server et ArcGIS Engine, qui utilisent (et continueront d’utiliser) la série Python 2. La série Python 3 est différente et n’est pas compatible avec la série Python 2. Bien que le langage soit fondamentalement identique, de nombreux détails importants ont été considérablement remaniés, notamment en ce qui concerne le fonctionnement des chaînes et des dictionnaires et l'organisation de la bibliothèque standard.

En cours de développement depuis de nombreuses années, Python 3 coexiste avec Python 2 alors que la communauté Python effectue sa migration. La plupart des principales bibliothèques tierces ont été transférées vers Python 3 et la communauté Python a choisi d’utiliser Python 3 dans tous les nouveaux projets de développement.

Que dois-je faire pour que mes scripts fonctionnent dans ArcGIS Pro et Python 3 ?

Vous devez avant tout décider si la mise à jour de votre code Python doit permettre une utilisation avec la version 10.x et ArcGIS Pro ou uniquement avec ArcGIS Pro. Si vous effectuez une conversion de code unilatérale de Python 2 à Python 3, vous pouvez faire appel à l’utilitaire de ligne de commande 2to3 pour automatiser une grande partie du processus. Cet utilitaire est disponible avec Python 2 et 3. Il est important de noter que l’outil 2to3, quoique excellent, n’est pas une solution complète (solution à 95 %, selon certaines estimations) et que des modifications supplémentaires peuvent se révéler nécessaires. Si vous devez prendre en charge Python 2 et 3, reportez-vous à la section suivante pour découvrir les stratégies de prise en charge des deux versions.

N’oubliez pas que des scripts Python plus simples n’ont pas forcément besoin d’être modifiés et peuvent fonctionner parfaitement sans être mis à jour.

Les sections suivantes décrivent les différences les plus courantes entre Python 2 et 3 que vous êtes susceptibles de rencontrer. Vous pouvez également consulter le site web de Lennart Regebro intitulé Porting to Python 3 (http://python3porting.com/) qui constitue une excellente source de référence sur le portage vers Python 3 et les stratégies de migration. Nous vous rappelons qu’il est possible de rédiger des scripts qui fonctionneront dans Python 2 et Python 3.

Réorganisation de la bibliothèque standard

La bibliothèque standard de Python 3 a fait l’objet d’une importante réorganisation depuis Python 2. La plupart de ces changements concernent des fonctions qui ont été déplacées ou qui font partie d’un module ayant été renommé. Pour rédiger du code qui fonctionne dans Python 2 et 3, vous pouvez aborder ces différences en utilisant des importations flexibles, telles que les suivantes, pour des modules comme urllib2 :

try:
    import urllib2  # Python 2
except ImportError:
    import urllib.request as urllib2  # Python 3

Instruction et fonction print

Les erreurs de syntaxe dans Python 2 sont généralement dues à la conversion de l’instruction print en fonction print. Heureusement, la fonction print a été retransférée vers Python 2 et peut être utilisée en toute sécurité dans Python 2 et 3.

print('This will print safely in Python 2 and 3')

# print statements will only work in Python 2
# print 'Print statements will only print safely in Python 2'

__future__

Au début de vos scripts, importez les indicateurs __future__ pour que le code Python 2 soit conforme à certaines des nouvelles règles Python 3. Si vos scripts fonctionnent correctement avec cette ligne, c’est que la compatibilité avec Python 3 est pratiquement assurée.

from __future__ import print_function, unicode_literals, absolute_import

Dictionnaires

Le cas échéant, utilisez dictionary.items() au lieu de dictionary.iteritems(). iteritems a été supprimé de Python 3 et items se comporte comme iteritems auparavant. Même conseil pour range et xrange : xrange a été supprimé de Python 3 et range se comporte désormais comme xrange.

Chaînes et codage

Dans Python 3, tous les éléments placés entre guillemets sont maintenant une chaîne Unicode. Le tableau d’octets remplace l’ancien type str. L’importation unicode_literals convertira implicitement en Unicode tous les éléments placés entre guillemets dans Python 2.

Python 3 gère le codage des caractères de manière plus stricte. Enregistrez explicitement vos scripts au format UTF-8, le cas échéant. Ajoutez une ligne de code telle que # coding: utf-8 au début de votre script pour que Python puisse interpréter le script en UTF-8.

Module io

Pensez à utiliser le module io. Introduit dans Python 2.6 et inclus dans Python 3, il permet de gérer efficacement de nombreuses tâches en entrée et en sortie grâce à une approche de codage du texte.

Formats de données non pris en charge

Plusieurs formats de données ne sont pas pris en charge actuellement dans ArcGIS Pro, notamment les catalogues raster, les réseaux géométriques, les jeux de données schématiques, les serveurs de géodatabase, les modèles de document ArcMap, les documents ArcReader, les diagrammes, les paquetages de cartes tuilées et les géodatabases personnelles.