Migración de Python desde 10.x a ArcGIS Pro

El uso de Python con ArcGIS Pro es distinto del de otros productos de ArcGIS, incluidos ArcGIS Desktop, ArcGIS Server y ArcGIS Engine.

La herramienta de geoprocesamiento Analyze Tools For Pro se puede usar para resaltar los problemas que podrían impedir la ejecución del código de Python o de las herramientas de geoprocesamiento basadas en Python. La herramienta Analyze Tools For Pro usa la utilidad 2to3 de Python para notificar posibles problemas de migración e identificar las herramientas y las funciones que no se han migrado a ArcGIS Pro.

Cambios en las funciones de ArcPy

La mayoría de las herramientas de geoprocesamiento seguirán estando disponibles en ArcGIS Pro. Sin embargo, algunas no lo estarán. Las herramientas no incluidas son las de las cajas de herramientas Cobertura, Estructura de parcelas, Schematics y Tracking Analyst. Algunas herramientas de otras cajas de herramientas tampoco están disponibles. Para obtener una lista completa, consulte la lista de herramientas no admitidas en ArcGIS Pro.

El módulo arcpy.mapping se ha eliminado y se ha reemplazado por un módulo arcpy.mp en ArcGIS Pro para permitir la asignación de flujos de trabajo en ArcGIS Pro.

El módulo arcpy.na también incluye cambios, muchos de ellos relacionados con el paso de arcpy.mapping a arcpy.mp.

Actualizar a Python 3

ArcGIS Pro utiliza Python 3. Supone un cambio significativo respecto a otros productos de ArcGIS, incluidos ArcGIS Desktop y ArcGIS Server, y ArcGIS Engine, los cuales han usado (y seguirán usando) versiones de la línea Python 2. Las versiones de Python 3 son una serie distinta y no son compatible con la línea Python 2. Aunque buena parte del lenguaje es esencialmente igual, muchos detalles importantes han cambiado bastante, incluidos el funcionamiento de las cadenas de caracteres y los diccionarios y la organización de la biblioteca estándar.

Python 3 lleva en desarrollo activo muchos años, en los que ha coexistido con Python 2 mientras la comunidad de Python se actualizaba. En este momento, la mayoría de las bibliotecas clave de terceros se han migrado a Python 3 y, en la comunidad de Python, existe un amplio consenso sobre el hecho de que todos los nuevos proyectos de desarrollo se realizarán en Python 3.

¿Qué debo hacer para que mis scripts funcionen en ArcGIS Pro y en Python 3?

Es esencial decidir si se va a actualizar el código de Python para que funcione en las versiones 10.x y ArcGIS Pro, o solo en ArcGIS Pro. Si va a realizar una conversión unidireccional del código de Python 2 a Python 3, existe una utilidad de línea de comandos denominada 2to3 que se puede usar para automatizar buena parte del proceso. Esta utilidad está disponible con Python 2 y 3. Es importante recordar que 2to3, aun siendo una excelente herramienta, no es una solución completa (a veces se valora como una solución completa al 95%) y puede ser necesario realizar cambios adicionales. Si necesita compatibilidad con Python 2 y 3, consulte a continuación las estrategias para admitir las dos versiones.

Recuerde que los scripts de Python más sencillos pueden no requerir cambios y probablemente funcionarán bien sin modificaciones.

En las secciones que siguen, se analizan algunas de las diferencias más comunes entre Python 2 y 3. Además, se puede encontrar una excelente referencia sobre el cambio a Python 3 y las estrategias de migración en la obra Porting to Python 3 de Lennart Regebro en el sitio web http://python3porting.com/. Recuerde que es posible escribir scripts que se puedan ejecutar en Python 2 y Python 3.

Reorganización de la biblioteca estándar

Como se describe en Python PEP 3108, Python 3 incluye una reorganización considerable de la biblioteca estándar respecto a Python 2. La mayor parte de estos cambios implican una función que ha pasado a una ubicación diferente o forma parte de un módulo al que se ha cambiado el nombre. Para escribir código que funcione en Python 2 y 3, estas diferencias se pueden tratar usando importaciones flexibles como las siguientes para módulos como urllib2:

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

Instrucción y función print

Una de las causas más comunes de errores de sintaxis de Python 2 es la conversión de la instrucción print en la función print. Por suerte, la función print sigue siendo compatible con Python 2 y se puede usar sin problemas en Python 2 y 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__

Al principio de sus scripts, importe los marcadores __future__ para que el código de Python 2 se someta a algunas de las nuevas reglas de Python 3. Una vez que los scripts se analicen correctamente con esta línea, estará cerca de garantizar la compatibilidad con Python 3.

from __future__ import print_function, unicode_literals, absolute_import

Diccionarios

Use dictionary.items() en lugar de dictionary.iteritems() cuando proceda. iteritems se ha eliminado en Python 3 y items se comporta como iteritems solía hacerlo. Lo mismo sucede con range y xrange: xrange se ha eliminado de Python 3 y range ahora se comporta como xrange.

Cadenas de caracteres y codificación

En Python 3, todo lo que aparece entre comillas es ahora implícitamente una cadena de caracteres de Unicode. La matriz de bytes reemplaza al antiguo tipo str. La importación unicode_literals convertirá implícitamente todo lo que aparezca entre comillas en Python 2 a Unicode.

Python 3 es más estricto en su forma de tratar la codificación de caracteres. Guarde expresamente sus scripts como UTF-8, si no lo ha hecho ya. Agregue una línea de código como # coding: utf-8 en la parte superior del script para que Python pueda identificar que el script está en UTF-8.

módulo io

Considere la posibilidad del módulo io. Se introdujo en Python 2.6 y se incluye en Python 3; proporciona una forma limpia de tratar muchas tareas de entrada y salida que tiene en cuenta la codificación del texto.

Formatos de datos no admitidos

Existen varios formatos de datos que no se admiten actualmente en ArcGIS Pro, entre ellos catálogos de ráster, redes geométricas, datasets esquemáticos, servidores de geodatabase, plantillas de documento de ArcMap, documentos de ArcReader, gráficos, paquetes de mapas en teselas y geodatabases personales.