Wytyczne dotyczące organizowania Python Toolbox (.pyt) w ArcGIS

17

Do jednego z moich zadań muszę utworzyć Przybornik z trzema narzędziami (skrypty python).

Zamiast zwykłego TBB postanowiłem napisać go jako Python Toolbox (pyt).

Wszystko jest jasne, z wyjątkiem „dobrego” sposobu organizacji kodu.

Ponieważ mam trzy narzędzia, nie jest dobrym sposobem na przechowywanie ich w jednym pliku (pyt). Postanowiłem więc przechowywać każde narzędzie w osobnym pliku .py.

Oto problem: jaki jest dobry sposób na zorganizowanie kilku plików za pomocą PYT w celu dystrybucji lub wdrożenia na ArcGIS dla serwera? Czy powinienem utrzymywać je na tym samym poziomie co plik PYT, czy powinienem umieścić je w jakimś podkatalogu (np. „Narzędzia”)?

Czy możesz polecić jakieś wytyczne Esri lub odniesienia do próbki „dużego zestawu narzędzi PYT”?

Nie znalazłem nic na ten temat. W wersji 10.0 istniała tak zwana struktura folderów ToolShare, z której korzystałem.

To bardziej kwestia stylu kodowania. Ponieważ pomysł stworzenia jednego pliku PYT z 500-1000 lub więcej liniami kodu nie wygląda mi dobrze i uważam, że nie jest to „pytoniczny” sposób.

Alex Markov
źródło
1
„pomysł stworzenia jednego pliku PYT z 500-1000 lub więcej liniami kodu nie wygląda mi dobrze”. Nie jesteś sam, Alex. Dzisiaj szybko stwierdziłem, że .pyt jest wynalazkiem chorego umysłu. I nie będę tego żałować.
Remigijus Pankevičius

Odpowiedzi:

17

Obejrzyj ten wątek na forum ArcGIS. Zasadniczo wystarczy użyć standardowych modułów Pythona lub struktury pakietu i zaimportować narzędzia do przybornika Pythona.

Coś jak:

#  \--SomeDir
#     |  toolbox.pyt
#     \--toolpackage
#        |  __init__.py
#        |  script_a.py
#        |  script_b.py


#----------------------------
#The .pyt file
#----------------------------

import arcpy
import toolpackage.script_a.Tool1 as Tool1
import toolpackage.script_a.Tool2 as Tool2
import toolpackage.script_b.Tool3 as Tool3

class Toolbox(object):
    def __init__(self):
        """Define the toolbox (the name of the toolbox is the name of the
        .pyt file)."""
        self.label = "MultiTool Toolbox"
        self.alias = "mtt"

        # List of tool classes associated with this toolbox
        self.tools = [Tool1, Tool2, Tool3]
użytkownik2856
źródło
Przekonałem się, że działa to poprawnie w ArcGIS Desktop, ale podczas publikowania usługi geoprzetwarzania w instancji ArcGIS Server traci wszystkie skrypty i pakiety oprócz pliku .pyt. Możliwe jest ręczne upuszczenie skryptów we wdrożeniu, ale zwiększa to złożoność.
Gnat
3
@Gnat Tak, myśli Luke'a są również moim doświadczeniem. Usługi publikowania ESRI nie rozpoznają żadnego from x import yimportu stylu. (Nawiasem mówiąc, jest to całkowicie niedorzeczne). Jednak uważam, że możesz pozostawić swoją self.toolsdefinicję w spokoju i użyć import toolpackage.script_a.Tool1 as Tool1.
jpmc26
1
Alias ​​powinien być krótki i zawierać tylko litery, tj. Self.alias = "mtt"
Curtis Price
2
Ponieważ spędziłem tylko godzinę, wprowadzając zmiany w kodzie narzędzi i próbując wyglądać na odzwierciedlone w GUI narzędzi w Arcmap, chciałbym się tym podzielić. Jeśli wprowadzasz zmiany w kodzie poza plikiem pyt i chcesz, aby odzwierciedlało to GUI narzędzia, musisz ponownie uruchomić ArcMap / Catalog. Możesz odświeżyć w przyborniku, ile chcesz, co wydaje się jedynie przeładowywać samo pytanie. Nie znajdzie zmian w innym kodzie.
TurboGus
1
@TurboGus gis.stackexchange.com/q/91112/2856
user2856 16.06.16