Python-Migration von 10.x zu ArcGIS AllSource

AllSource 1.3    |

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

Das Werkzeug 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-Dienstprogramm 2to3, um potenzielle Migrationsprobleme zu erfassen. Das Werkzeug identifiziert außerdem Werkzeuge und Funktionalität, die nicht in ArcGIS AllSource migriert wurden.

Änderungen der Funktionalität in ArcPy

Bis auf einige Ausnahmen, ist die Mehrheit der Geoverarbeitungswerkzeuge weiterhin in ArcGIS AllSource 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 AllSource.

Das Modul arcpy.mapping wurde entfernt und durch das arcpy.mp-Modul in ArcGIS AllSource ersetzt, um Kartenerstellungs-Workflows in ArcGIS AllSource 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.

Python 3

ArcGIS AllSource verwendet Python 3. Python 3 ist eine beliebte Programmiersprache, die in einer Vielzahl von Bereichen eingesetzt wird, darunter Datenanalyse, Data Science, Qualitätssicherung sowie Web- und Softwareentwicklung.

Vorversion:

Frühere ArcGIS-Produkte, einschließlich ArcGIS Desktop, ArcGIS Server und ArcGIS Engine verwenden Versionen von Python 2. Die Python 3-Releases sind eine komplett andere Serie, die nur teilweise mit der Python 2-Serie kompatibel ist. Zwar ist der Großteil der Sprache identisch, aber viele Details haben sich geändert, z. B. die Funktionsweise von Zeichenfolgen und Wörterbüchern oder der Aufbau der Standardbibliothek.

Konvertieren eines in ArcGIS AllSource und Python 3 verwendeten vorhandenen Skripts

Bei einer einfachen Konvertierung von Python 2 zu Python 3 können Sie das Befehlszeilen-Dienstprogramm 2to3 verwenden, um einen Großteil des Vorgangs zu automatisieren. Dieses Dienstprogramm ist mit Python 2 und 3 verfügbar. Es ist wichtig zu wissen, dass das Dienstprogramm 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, sind hierfür die nachfolgenden Strategien verfügbar.

Einfachere Python-Skripte verlangen eventuell gar keine Änderungen und funktionieren problemlos auch so.

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

Reorganisation der Standardbibliothek

Die Standardbibliothek in Python 3 wurde gegenüber Python 2 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äufige 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 der 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 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

Das io-Modul wurde in Python 2.6 eingeführt und ist 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 AllSource unterstützt, darunter Raster-Kataloge, geometrische Netzwerke, Schematic-Datasets, Geodatabase-Server, ArcMap-Dokumentvorlagen, ArcReader-Dokumente, Diagramme, gekachelte Kartenpakete und Personal-Geodatabases.