Erweitern der Geoverarbeitung durch Python-Module
Anhand der Python Distribution Utilities (Distutils) und der Informationen in der Python-Dokumentation Verteilung von Python-Modulen können Python-Toolboxes und benutzerdefinierte Toolboxes, die Modelle und/oder Skriptwerkzeuge enthalten, effizient in Form von Python-Modulen auf ArcGIS-Benutzer verteilt werden. Das Erstellen und Verteilen dieser Toolboxes beginnt mit der Erstellung des Python-Moduls. In diesem Beispiel wird das Modul foo.py verwendet.
Beispielcode zum Erstellen des Python-Moduls "foo":
import os
def hello():
print 'Hello ' + os.getenv('username')
Um das Modul richtig zu erstellen und zu verteilen, muss eine bestimmte Verzeichnisstruktur vorhanden sein. Zum Speichern des foo-Moduls muss ein Verzeichnis mit dem Namen foo erstellt werden. Da es für die Verteilung erforderlich ist, dass das Verzeichnis, in dem das foo-Modul gespeichert wird, sich in einem übergeordneten Verzeichnis befindet, wird ein Verzeichnis namens src für das foo-Verzeichnis und das foo-Modul erstellt. Die Verzeichnisstruktur sollte folgendermaßen aussehen:
![Alternativtext ist erforderlich Alternativtext ist erforderlich](002z/GUID-AFA427D1-7555-4364-BBD1-6051304F5DF1-web.png)
Damit das foo-Modul nach dem Import bestimmten Code initialisiert und automatisch ausführt, erfordert es eine __init__.py-Datei. Wenn __init__.py vorhanden ist, können Benutzer auf das foo-Modul zugreifen und ausgewählte Definitionen importieren.
Beispielcode zum Erstellen von "__init__.py" für foo:
from foo import hello
Die Verzeichnisstruktur sollte nun folgendermaßen aussehen:
![Alternativtext ist erforderlich Alternativtext ist erforderlich](002z/GUID-4C331CF2-0AD8-47DE-9646-4C990E9DA7F4-web.png)
Wenn diese Dateien und die Verzeichnisstruktur vorhanden sind, kann das foo-Modul durch import foo importiert und foo.hello() aufgerufen und ausgeführt werden. Der nächste Schritt besteht darin, ein Verteilungspaket für das foo-Modul zu erstellen, sodass es im Python-Verzeichnis site-packages installiert werden kann, um problemlos freigegeben zu werden. Dies erfolgt durch Schreiben eines setup.py-Skripts.
Beispielcode zum Erstellen von "setup.py":
from distutils.core import setup
setup(name='foo',
version='1.0',
packages=['foo'],
package_dir={'foo': 'foo'},
)
Die setup.py-Datei legt den Modulnamen und die Version fest und verweist das Erstellungs-Utility auf das Paketverzeichnis. Die setup.py-Datei sollte im src-Verzeichnis gespeichert werden. Nun sollte die Verzeichnisstruktur folgendermaßen aussehen:
![Alternativtext ist erforderlich Alternativtext ist erforderlich](002z/GUID-8FE611B8-D3A2-41D3-81A8-223B1DFB97D6-web.png)
Wenn die Verzeichnisstruktur vorhanden ist, kann ein Installationsprogramm für das foo-Modul erstellt werden, indem unter Verwendung der entsprechenden Eingabeaufforderung des Betriebssystems einer der folgenden Befehle im src-Verzeichnis ausgeführt wird. Dieses Beispiel wird unter dem Windows-Betriebssystem erstellt.
![Hinweis Hinweis](rsrc/note.png)
Stellen Sie sicher, dass der Pfad zur Datei "python.exe" in Ihrem System festgelegt ist. Im Windows-Betriebssystem kann dies erfolgen, indem Sie der Systemvariablen "PATH" in den Umgebungsvariablen des Windows-Betriebssystems "C:\Python27\ArcGIS10.2" hinzufügen.
Windows:
python setup.py bdist_wininst
Linux:
python setup.py bdist_rpm
Der Windows-Manager erstellt die Verzeichnisse dist und build im Verzeichnis src. Im Verzeichnis dist wird die Datei "foo-1.0.win32.exe" erstellt. Dies ist eine ausführbare Datei, die verteilt werden kann, um das foo-Modul im Python-Verzeichnis site-packages auf einem Windows-Computer zu installieren. Als Alternative zur Ausführung der ausführbaren Datei zum Installieren des foo-Moduls kann das Verzeichnis "foo" auch vom Verzeichnis build/lib in das Python-Verzeichnis site-packages kopiert werden. Wenn Einschränkungen für Benutzer bestehen, die die Ausführung einer ausführbaren Datei nicht zulassen, wird beim Kopieren des Verzeichnisses "foo" vom Verzeichnis build/lib in das Verzeichnis site-packages der gleiche Effekt erzielt wie beim Installieren durch die ausführbare Datei. Nachdem das foo-Modul im Verzeichnis site-packages installiert oder dorthin kopiert wurde, sollte die Struktur folgendermaßen aussehen:
![Alternativtext ist erforderlich Alternativtext ist erforderlich](002z/GUID-11D9B1FC-BF46-498C-975B-B88DFD78C69D-web.png)
Dieser Prozess kann weiter implementiert werden, um Geoverarbeitungsfunktionen zu erweitern, indem benutzerdefinierte Toolboxes und/oder Python-Toolboxes den ArcGIS-System-Toolboxes direkt hinzugefügt werden. Als System-Toolbox kann sie in der Liste der System-Toolboxes in ArcGIS direkt aufgerufen werden und ArcPy-Wrapper erstellen, um ArcPy ebenso zu erweitern. Dadurch kann das benutzerdefinierte Toolbox-Modul außerdem die Vorteile der wirksamen Methode nutzen, die ArcGIS-System-Toolboxes für die Meldungsverteilung, sprachbasierte Hilfe und Antwort auf lokalisierte Einstellungen bietet. ArcGIS for Desktop durchsucht den Speicherort für Python-site-packages, um zu ermitteln, ob in jedem Modul ein Verzeichnis mit dem Namen esri vorhanden ist. Das Verzeichnis esri enthält die benutzerdefinierten Toolboxes mit den verknüpften Hilfedateien. Nachfolgend finden Sie die Verzeichnisstruktur für die englische Sprache:
![Alternativtext ist erforderlich Alternativtext ist erforderlich](002z/GUID-16AE7416-0BB1-4157-864B-8362D7D07B46-web.png)
Bei Verwendung von Skriptwerkzeugen sind benutzerdefinierte Toolboxes (.tbx und .pyt) sowie alle unterstützenden Skripte im Verzeichnis esri/toolboxes abgelegt. Im Verzeichnis esri/help/gp sind die Toolbox- und Werkzeug-Metadaten (.xml) für benutzerdefinierte Toolboxes und Werkzeuge gespeichert. Die Benennungsregel für die Toolbox lautet "<Tolbox-Alias>_toolbox.xml" und die Benennungsregel für jedes Werkzeug lautet "<Werkzeugname>_<toolbox alias>.xml". Im Verzeichnis esri/help/gp/messages werden alle Geoverarbeitungsmeldungsdateien (.xml) gespeichert. Diese Meldungsdateien werden in den Python-Toolboxes für Meldungen verwendet, die internationalisiert werden müssen. Die Override-Dateien der Toolbox- und Werkzeugbeschriftungskategorien befinden sich im Verzeichnis esri/help/gp/toolboxes. Durch die Erstellung einer neuen Python-Toolbox namens SamplePythonToolbox, kann der gesamte Prozess der Geoverarbeitungserweiterung durch Python-Module demonstriert werden. Zusätzliche Informationen zum Erstellen von und Arbeiten mit Python-Toolboxes finden Sie unter http://resources.arcgis.com/en/help/main/10.1/index.html#//001500000034000000.
![Hinweis Hinweis](rsrc/note.png)
Es wichtig, einen Alias für die Python-Toolbox festzulegen, der in diesem Prozess verwendet wird.
Beispielcode zum Erstellen einer Python-Toolbox:
import arcpy
import os
import foo
class Toolbox(object):
def __init__(self):
"""Define the toolbox (the name of the toolbox is the name of the
.pyt file)."""
self.label = "Toolbox"
self.alias = "SampleToolbox"
# List of tool classes associated with this toolbox
self.tools = [SampleTool]
class SampleTool(object):
def __init__(self):
"""Define the tool (tool name is the name of the class)."""
self.label = "Sample Tool"
self.description = ""
self.canRunInBackground = False
def getParameterInfo(self):
"""Define parameter definitions"""
params = None
return params
def isLicensed(self):
"""Set whether tool is licensed to execute."""
return True
def updateParameters(self, parameters):
"""Modify the values and properties of parameters before internal
validation is performed. This method is called whenever a parameter
has been changed."""
return
def updateMessages(self, parameters):
"""Modify the messages created by internal validation for each tool
parameter. This method is called after internal validation."""
return
def execute(self, parameters, messages):
"""The source code of the tool."""
messages.AddMessage(os.getenv("username") + " welcome to the sample tool")
foo.hello()
return
Das foo-Modul wurde in die SamplePythonToolbox.pyt importiert und die Ausführungsmethode der SampleTool-Klasse hat die Funktion hello aus dem foo-Modul aufgerufen. Dies ist eine effiziente Möglichkeit, benutzerdefinierten Python-Code als Modul zu verteilen und die entsprechenden Funktionen durch ArcGIS-Geoverarbeitungswerkzeuge bereitzustellen. Nachdem die SamplePythonToolbox.pyt erstellt und die Hilfe im Seitenbereich durch die im Kontextmenü Elementbeschreibung bearbeiteten Metadaten für die Toolbox konfiguriert oder eine benutzerdefinierte kompilierte Hilfedatei (.chm) erstellt wurde, muss sie mit den zugehörigen XML-Dateien aus dem Verzeichnis, indem sie erstellt wurde, kopiert werden. Kopieren Sie die Dateien mit ArcCatalog oder über das Fenster Katalog in das Verzeichnis esri/toolboxes, das in der Verteilungsstruktur vorhanden ist. Das Verzeichnis esri und das Datei-Layout sollten folgendermaßen aussehen:
![Alternativtext ist erforderlich Alternativtext ist erforderlich](002z/GUID-799FA518-2E1F-466F-B9E7-1CB01BF3A36B-web.png)
Die neue Verzeichnisstruktur für die Verteilung sollte folgendermaßen aussehen:
![Alternativtext ist erforderlich Alternativtext ist erforderlich](002z/GUID-D865BDBD-868B-4691-8067-C5579E7C148F-web.png)
Um diese Änderungen in der Verteilung wiederzugeben, muss die setup.py-Datei bearbeitet werden.
Beispielcode zum Einbeziehen von setup.py-Verzeichnisänderungen:
from distutils.core import setup
setup(name='foo',
version='1.0',
packages=['foo'],
package_dir={'foo': 'foo'},
package_data={'foo': ['esri/toolboxes/*.*']},
)
Die neue setup.py-Datei unterscheidet sich durch eine Zeile von der ursprünglichen, wo die zusätzlichen im esri-Verzeichnis gefundenen Daten dem Paket hinzugefügt werden. Wenn nun der Manager für das foo-Modul ausgeführt und installiert wird, wird die folgende Verzeichnisstruktur im Python-Verzeichnis site-packages erstellt:
![Alternativtext ist erforderlich Alternativtext ist erforderlich](002z/GUID-A4B33A4E-52B7-4AFB-92B5-6FAE34CEE4EF-web.png)
Mithilfe von ArcGIS for Desktop und den Python Distribution Utilities (Distutils) kann ein Paket erstellt und installiert werden, das die Geoverarbeitung mit benutzerdefinierten Werkzeugen in benutzerdefinierten Toolboxes erweitert, die über die ArcGIS-System-Toolboxes angezeigt und ausgeführt werden können. Mehr wird für englischsprachige Verteilungen nicht benötigt. Das Thema Internationalisierung baut auf dem Prozess der Geoverarbeitungserweiterung auf, um die gleiche Methode zu nutzen, die Esri zum Packen des Moduls zur Verteilung in anderen Sprachen als Englisch verwendet.