Python-Migration von 10.x zu ArcGIS Pro

Die Verwendung von Python mit ArcGIS Pro unterscheidet sich von anderen ArcGIS-Produkten, wie etwa ArcGIS Desktop, ArcGIS Server und ArcGIS Engine.

Das Geoverarbeitungswerkzeug Werkzeuge für ArcGIS Pro analysieren kann verwendet werden, um Probleme hervorzuheben, die verhindern könnten, dass Python-Code oder Python-basierte Geoverarbeitungswerkzeuge ausgeführt werden. Das Werkzeug Werkzeuge für Pro analysieren verwendet das Python 2to3-Dienstprogramm , um potenzielle Migrationsprobleme zu erfassen sowie Werkzeuge und Funktionalität zu identifizieren, die nicht in ArcGIS Pro migriert wurden.

Änderungen der Funktionalität in ArcPy

Bis auf einige Ausnahmen, ist die Mehrheit der Geoverarbeitungswerkzeuge weiterhin in ArcGIS Pro verfügbar. Nicht enthalten sind die Werkzeuge in den Toolboxes "Coverage", "Parcel Fabric", "Schematics" und "Tracking Analyst". Zusätzliche Werkzeuge in anderen Toolboxes sind ebenfalls nicht verfügbar. Eine vollständige Liste finden Sie unter Liste der nicht unterstützten Werkzeuge in ArcGIS Pro.

Das Modul arcpy.mapping wurde entfernt und durch ein arcpy.mp-Modul in ArcGIS Pro ersetzt, um Kartenerstellungs-Workflows in ArcGIS Pro zu unterstützen.

Das Modul arcpy.na umfasst außerdem Änderungen, von denen viele mit der Änderung von arcpy.mapping in arcpy.mp in Beziehung stehen.

Aktualisieren auf Python 3

ArcGIS Pro verwendet Python 3. Dies unterscheidet sich erheblich von anderen ArcGIS-Produkten wie ArcGIS Desktop, ArcGIS Server und ArcGIS Engine, die Releases in der Python 2-Serie verwendet haben (und weiterhin verwenden). Die Python 3-Releases sind eine komplett andere Serie, die nicht mit der Python 2-Serie kompatibel ist. Zwar ist der Großteil der Sprache identisch, aber viele wesentliche Details haben sich deutlich geändert, z. B. die Funktionsweise von Strings und Wörterbüchern oder der Aufbau der Standardbibliothek.

Python 3 befindet sich seit über fünf Jahren in aktiver Entwicklung und in Koexistenz mit Python 2, damit die Python-Community eine Portierung durchführen konnte. Mittlerweile wurde die Mehrheit von wichtigen Dritthersteller-Bibliotheken auf Python3 portiert und die Python-Community hat vereinbart, dass alle neuen Entwicklungsprojekte in Python 3 erfolgen werden.

Welche Voraussetzungen müssen erfüllt sein, damit Skripte in ArcGIS Pro und Python 3 funktionieren?

Ein wesentlicher Entscheidungsfaktor ist, ob Sie Ihren Python-Code so aktualisieren, dass er sowohl in 10.x als auch in ArcGIS Pro oder nur in ArcGIS Pro funktioniert. Bei einer einfachen Konvertierung von Python 2 zu Python 3 kann mit dem Befehlszeilen-Dienstprogramm 2to3 ein Großteil des Vorgangs automatisiert werden. Dieses Dienstprogramm ist mit Python 2 und 3 verfügbar. Es ist wichtig zu wissen, dass 2to3 ein ausgezeichnetes Werkzeug, aber keine komplette Lösung (mitunter als 95-Prozent-Lösung bezeichnet) ist, und dass möglicherweise zusätzliche Änderungen erforderlich sind. Wenn Python 2 und 3 unterstützt werden müssen, stehen Ihnen die nachfolgenden Strategien offen.

Bedenken Sie, dass einfachere Python-Skripte eventuell gar keine Änderungen verlangen und problemlos in beiden Versionen funktionieren.

Die folgenden Abschnitte behandeln einige der üblichen Unterschiede zwischen Python 2 und 3, denen Sie wahrscheinlich begegnen werden. Darüber hinaus gibt es eine herausragende Referenz zur Portierung zu Python 3 sowie Migrationsstrategien in Porting to Python 3 von Lennart Regebro und auf der Website http://python3porting.com/. Und vergessen Sie nicht: Es ist möglich, Skripte zu schreiben, die sowohl in Python 2 als auch in Python 3 ausgeführt werden können.

Reorganisation der Standardbibliothek

Die Standardbibliothek in Python 3 wurde gegenüber Python 2 erheblich umorganisiert. Die meisten dieser Änderungen betreffen Funktionalität, die an eine andere Stelle verlagert wurde oder Teil eines umbenannten Moduls ist. Um Code zu schreiben, der in Python 2 und 3 funktioniert, können diese Unterschiede durch flexible Importe berücksichtigt werden. Für Module wie urllib2 kann sich dies folgendermaßen gestalten:


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

print-Anweisung und -Funktion

Eine häufigere Ursache für Syntaxfehler in Python 2 ist die Konvertierung der print-Anweisung in die print-Funktion. Glücklicherweise wurde die print-Funktion zurück auf Python 2 portiert und kann zuverlässig in Python 2 und 3 genutzt werden.


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__

Importieren Sie am Beginn Ihrer Skripte die __future__-Flags, damit Ihr Python 2-Code einigen der neuen Python 3-Regeln folgt. Sobald Ihre Skripte korrekt mit dieser Zeile geparst werden, steht der Kompatibilität mit Python 3 nichts mehr im Weg.


from __future__ import print_function, unicode_literals, absolute_import

Wörterbücher

Verwenden Sie wo erforderlich nun dictionary.items() anstelle von dictionary.iteritems(). iteritems wurde in Python 3 entfernt und items verhält sich wie zuvor iteritems. Dasselbe gilt für range und xrange. xrange wurde in Python 3 entfernt und range verhält sich jetzt wie xrange.

Strings und Codierung

In Python 3 ist nun alles in Anführungszeichen implizit ein Unicode-String. Das Byte-Array nimmt den Platz des früheren str-Typen ein. Der unicode_literals-Import wandelt alle von Anführungszeichen umgebenen Zeichen in Python 2 nach Unicode um.

Python 3 ist strenger bei der Behandlung der Zeichencodierung. Sofern noch nicht geschehen, speichern Sie Ihre Skripte explizit als UTF-8. Fügen Sie am Anfang Ihres Skripts eine Codierungszeile hinzu, wie z. B. # coding: utf-8, damit Python erkennt, dass das Skript in UTF-8 geschrieben ist.

io-Modul

Ziehen Sie ebenfalls das io-Modul in Betracht. Es wurde in Python 2.6 eingeführt und auch in Python 3 enthalten. Es bietet eine übersichtliche Möglichkeit, viele Eingabe- und Ausgabeaufgaben auf eine textkodierungsfreundliche Weise zu erledigen.

Nicht unterstützte Datenformate

Mehrere Datenformate werden derzeit nicht in ArcGIS Pro unterstützt, darunter Raster-Kataloge, geometrische Netzwerke, Schematic-Datasets, Geodatabase-Server, ArcMap-Dokumentvorlagen, ArcReader-Dokumente, Diagramme, gekachelte Kartenpakete und Personal-Geodatabases.