Używając przybornika Pythona (.pyt) w ArcMap, zwykle podążam za wzorem, w którym sam plik .pyt jest po prostu opakowaniem do zbierania argumentów wejściowych i definiowania samych narzędzi. Kod pomocniczy jest przechowywany w osobnych modułach testowanych przez jednostkę.
Przykład:
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)
Działa to naprawdę dobrze, ale natknąłem się na jedną frustrującą kwestię podczas programowania. Kliknij prawym przyciskiem myszy -> Odśwież .pyt w ArcMap odświeża tylko kod pliku .pyt. Nie odświeża importowanych modułów, więc muszę zamykać i ponownie otwierać ArcMap za każdym razem, gdy coś tam zmieniam. Na szczęście, ponieważ testuję kod niezależnie, nie muszę tego robić toną, ale wciąż jest to poważny problem. Czy jest na to jakiś sposób? Nieco powiązane - czy jest jakiś sposób, aby w pełni odświeżyć konsolę Python (mam niestandardowy pakiet strony, który muszę również zamknąć / ponownie otworzyć ArcMap, aby również pobrać zmiany)?
Używam ArcMap 10.2.1.
źródło
reload()
zaraz po zaimportowaniu modułu wspierającego, w górnej części pliku PYT w przyborniku. Zatem, jeśli zestaw narzędzi zawiera kilka narzędzi, nie muszę powielać przeładowania w funkcji każdego narzędziaexecute()
.from pyfile import Tool
, dodającreload(tool)
zyskitypeError: reload() argument must be module
. Jakieś pomysły?Oto inny i bardziej niezawodny sposób, niż sugerowałem wcześniej.
Sam nie korzystałem z tego modułu, ale myślę, że rozwiązałoby to twój problem:
Program ładujący moduł Pythona
Biorąc pod uwagę poprzedni przykład, powinno to załadować wszystkie zależności za pomocą jednego połączenia:
Po raz pierwszy zauważyłem ten moduł, więc jeśli zastosujesz go w swoich narzędziach, skomentuj, jak dobrze dla ciebie działa.
źródło