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

AllSource 1.3    |

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

La herramienta Herramientas de análisis para 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 para Pro usa la utilidad 2to3 de Python para notificar posibles problemas de migración. La herramienta también identifica las herramientas y la funcionalidad que no se han migrado a ArcGIS AllSource.

Cambios en las funciones de ArcPy

La mayoría de las herramientas de geoprocesamiento seguirán estando disponibles en ArcGIS AllSource. 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 AllSource.

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

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

Python 3

ArcGIS AllSource utiliza Python 3. Python 3 es un lenguaje de programación popular que se utiliza en una serie de ámbitos, incluido el análisis de datos, la ciencia de datos, la garantía de calidad y el desarrollo de software y web.

Heredado:

Los productos de ArcGIS anteriores, incluidos ArcGIS Desktop, ArcGIS Server y ArcGIS Engine, utilizan las versiones de Python 2. Las versiones de Python 3 son una serie distinta que solo es parcialmente compatible con Python 2. Aunque buena parte del lenguaje es esencialmente igual, han cambiado muchos detalles, incluidos el funcionamiento de las cadenas de caracteres y los diccionarios y la organización de la biblioteca estándar.

Conversión del uso de una secuencia de comandos existente en ArcGIS AllSource y Python 3

Si va a realizar una conversión unidireccional del código de Python 2 a Python 3, puede utilizar la utilidad de línea de comandos 2to3 para automatizar buena parte del proceso. Esta utilidad está disponible con Python 2 y 3. Es importante recordar que la utilidad 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.

Recuerde que las secuencias de comandos de Python más sencillas pueden no requerir cambios y probablemente funcionarán bien sin ellos.

En las secciones que siguen se describen algunas de las diferencias comunes entre Python 2 y 3. Además, hay una 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/. Es posible escribir secuencias de comandos que se ejecutan en Python 2 y Python 3.

Reorganización de la biblioteca estándar

Python 3 incluye una reorganización de la biblioteca estándar respecto a Python 2. La mayor parte de estos cambios son cambios de ubicación de ciertas funcionalidades o el cambio de nombre del módulo del que forman parte. 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 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. 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 convierte implícitamente todo lo que aparece 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 secuencias de comandos 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

El módulo io se ha introducido en Python 2.6 y está incluido con Python 3. Ofrece 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 AllSource, 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.