Linee guida per l'organizzazione di Python Toolboxes (.pyt) in ArcGIS


17

Per uno dei miei compiti ho bisogno di creare una casella degli strumenti con tre strumenti (script Python).

Invece del normale tbx ho deciso di scriverlo come Python Toolbox (pyt).

Tutto è chiaro tranne il modo "buono" di organizzare il codice.

Dato che ho tre strumenti, non è un buon modo per archiviarli in un file (pyt). Quindi, ho deciso di conservare ogni strumento in un file .py separato.

Ecco un problema: qual è il modo migliore per organizzare diversi file con PYT per la distribuzione o la distribuzione su ArcGIS per Server? Devo tenerli allo stesso livello con il file PYT o inserirli in una sottodirectory (ad esempio "Strumenti")?

Potete consigliarmi delle linee guida Esri o fare riferimento al campione "big PYT toolbox"?

Non ho trovato nulla su questo argomento. Nella versione 10.0 c'era la cosiddetta struttura di cartelle ToolShare che ho usato.

Questa è più una questione di stile di codifica. Perché l'idea di creare un file PYT con 500-1000 o più righe di codice non mi sembra buona e credo che non sia un modo "pitonico".


1
"l'idea di creare un file PYT con 500-1000 o più righe di codice non mi sembra buona". Non sei solo, Alex. Oggi ho prontamente affermato che .pyt è un'invenzione della mente malata. E non me ne pentirò.
Remigijus Pankevičius

Risposte:


17

Dai un'occhiata a questa discussione sul forum ArcGIS. Fondamentalmente usa semplicemente i moduli standard di Python o una struttura di pacchetto e importa i tuoi strumenti nella casella degli strumenti di Python.

Qualcosa di simile a:

#  \--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]

Ho scoperto che questo funziona bene in ArcGIS Desktop, ma quando pubblica un servizio di geoprocessing su un'istanza di ArcGIS Server, allora perde tutti gli script e i pacchetti, tranne il file .pyt. Potrebbe essere possibile rilasciare manualmente gli script nella distribuzione, ma ciò aumenta la complessità.
Gnat,

3
@Gnat Sì, anche i pensieri di Luke sono la mia esperienza. I servizi di pubblicazione di ESRI non riconoscono nessuna delle from x import yimportazioni di stile. (Questo è del tutto ridicolo, comunque.) Tuttavia, credo che tu possa lasciare self.toolssola la tua definizione e usarla import toolpackage.script_a.Tool1 as Tool1.
jpmc26,

1
L'alias dovrebbe essere breve e contenere solo lettere, ovvero self.alias = "mtt"
Curtis Price

2
Dato che ho appena trascorso un'ora a modificare il mio codice degli strumenti e cercando di sembrare riflesso nella GUI degli strumenti in Arcmap, vorrei condividere questo. Se si apportano modifiche al codice al di fuori del file pyt e si desidera vederlo riflesso nella GUI dello strumento, è necessario riavviare ArcMap / Catalog. Puoi premere il pulsante di aggiornamento sulla casella degli strumenti tutto ciò che desideri, che sembra ricaricare solo il pyt stesso. Non troverà le modifiche all'altro codice.
TurboGus,

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.