Wenn Sie in ArcMap eine Python-Toolbox (.pyt) verwenden, folgen Sie in der Regel einem Muster, bei dem die .pyt-Datei selbst nur ein Wrapper ist, um Eingabeargumente zu sammeln und die Tools selbst zu definieren. Der unterstützende Code wird in separaten, für Einheiten testbaren Modulen aufbewahrt.
Beispiel:
import supporting_module
class MyTool(object):
...
def execute(self, parameters, messages):
"""The source code of the tool."""
some_input = parameters[0].valueAsText
some_output = parameters[1].valueAsText
supporting_module.do_something(some_input, some_output)
arcpy.SetParameter(2, some_output)
Das funktioniert sehr gut, aber ich bin während der Entwicklung auf ein frustrierendes Problem gestoßen. Klicken Sie mit der rechten Maustaste auf "-> Aktualisieren" auf ".pyt" in ArcMap aktualisiert nur den Code der .pyt-Datei. Die importierten Module werden nicht aktualisiert, sodass ich ArcMap schließen und erneut öffnen muss, wenn ich dort etwas ändere. Da ich den Code unabhängig teste, muss ich das zum Glück nicht viel tun, aber es ist immer noch ein großer Aufwand. Gibt es einen Weg, dies zu umgehen? Etwas verwandt - gibt es eine Möglichkeit, die Python-Konsole vollständig zu aktualisieren (ich habe ein benutzerdefiniertes Site-Paket, das ich auch schließen / erneut öffnen muss, um Änderungen zu übernehmen)?
Ich verwende ArcMap 10.2.1.
quelle
reload()
direkt nach dem Import des unterstützenden Moduls oben in der PYT-Datei der Toolbox aufzurufen. Wenn die Toolbox also mehrere Tools enthält, muss ich das Nachladen nicht in dieexecute()
Funktionen der einzelnen Tools kopieren .from pyfile import Tool
und fügereload(tool)
Retouren hinzutypeError: reload() argument must be module
. Irgendwelche Ideen?Hier ist ein anderer und robusterer Weg, als ich zuvor vorgeschlagen habe.
Ich habe dieses Modul nicht selbst verwendet, aber ich denke, es würde Ihr Problem lösen:
Python Module Reloader
In dem vorherigen Beispiel sollten alle Abhängigkeiten mit einem Aufruf geladen werden:
Dies ist das erste Mal, dass mir dieses Modul auffällt. Wenn Sie es also in Ihren Tools implementieren, kommentieren Sie, wie gut es für Sie funktioniert.
quelle