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 Herramientas de análisis de 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 Herramientas de análisis de Pro usa la utilidad de Python 2to3 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, entre otras, las de las cajas de herramientas Coverage (arcpy.arc), Parcel Fabric (arcpy.fabric), Schematics (arcpy.schematics) y Tracking Analyst (arcpy.ta). Algunas herramientas de otras cajas de herramientas tampoco están disponibles. Para obtener una lista completa, consulte la lista de herramientas no admitidas de ArcGIS Pro.
El módulo arcpy.mapping se ha eliminado y se ha reemplazado con 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. Esto supone un cambio importante con respecto a otros productos de ArcGIS, como ArcGIS Desktop, ArcGIS Server y ArcGIS Engine, que han usado (y seguirán usando) versiones de la línea de Python 2. La línea de versiones de Python 3 es diferente y es incompatible con la línea de 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 ha estado en desarrollo activo durante más de cinco 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 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 la sección que sigue, 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
Tal y como se describe en Python PEP 3108, Python 3 incluye una reorganización significativa de la biblioteca estándar de 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 de impresión
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 and 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á 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.