Pedoman untuk mengatur Python Toolboxes (.pyt) di ArcGIS

17

Untuk salah satu tugas saya, saya perlu membuat Toolbox dengan tiga alat (skrip python).

Alih-alih tbx biasa saya telah memutuskan untuk menulisnya sebagai Python Toolbox (pyt).

Semuanya jelas kecuali cara "baik" untuk mengatur kode.

Karena saya memiliki tiga alat itu bukan cara yang baik untuk menyimpannya dalam satu file (pyt). Jadi, saya telah memutuskan untuk menyimpan setiap alat dalam file .py yang terpisah.

Inilah masalah: apa cara yang baik untuk mengatur beberapa file dengan PYT untuk distribusi atau penyebaran di ArcGIS untuk Server? Haruskah saya menyimpannya pada tingkat yang sama dengan file PYT atau haruskah saya menempatkannya di beberapa subdirektori (yaitu "Alat")?

Bisakah Anda merekomendasikan contoh pedoman Esri atau referensi "kotak alat PYT besar"?

Saya belum menemukan apa pun tentang topik ini. Dalam versi 10.0 ada yang disebut struktur folder ToolShare yang saya gunakan.

Ini lebih merupakan pertanyaan tentang gaya pengkodean. Karena ide untuk membuat satu file PYT dengan 500-1000 atau lebih baris kode tidak terlihat bagus untuk saya dan saya percaya itu bukan cara "pythonic".

Alex Markov
sumber
1
"ide untuk membuat satu file PYT dengan 500-1000 atau lebih baris kode tidak terlihat bagus untuk saya". Kamu tidak sendirian, Alex. Hari ini saya segera menyatakan bahwa .pyt adalah penemuan pikiran yang sakit. Dan saya tidak akan menyesalinya.
Remigijus Pankevičius

Jawaban:

17

Lihat utas ini di forum ArcGIS. Pada dasarnya cukup gunakan modul python standar atau struktur paket dan impor alat Anda ke kotak alat python.

Sesuatu seperti:

#  \--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]
pengguna2856
sumber
Saya telah menemukan bahwa ini berfungsi dengan baik di ArcGIS Desktop, tetapi ketika menerbitkan layanan geoprocessing ke instance ArcGIS Server maka ia kehilangan semua skrip dan paket, terlepas dari file .pyt. Dimungkinkan untuk meletakkan skrip ke dalam penyebaran secara manual, tetapi hal itu meningkatkan kompleksitas.
Nyamuk
3
@ Agat Ya, pikiran Luke adalah pengalaman saya juga. Layanan penerbitan ESRI tidak mengenali from x import yimpor gaya apa pun . (Omong-omong, itu sepenuhnya konyol.) Namun, saya yakin Anda dapat membiarkan self.toolsdefinisi Anda sendiri dan menggunakannya import toolpackage.script_a.Tool1 as Tool1.
jpmc26
1
Alias ​​harus pendek dan hanya berisi huruf, yaitu self.alias = "mtt"
Curtis Price
2
Karena saya hanya menghabiskan waktu satu jam untuk membuat perubahan pada kode alat saya dan mencoba membuatnya tampak tercermin dalam alat gui di Arcmap saya ingin membagikan ini. Jika Anda membuat perubahan dalam kode Anda di luar file pyt dan ingin melihatnya tercermin dalam alat gui Anda harus me-restart ArcMap / Katalog. Anda dapat menekan segarkan di kotak alat semau Anda, yang sepertinya hanya memuat pyt itu sendiri. Itu tidak akan menemukan perubahan ke kode lain.
TurboGus
1
@TurboGus gis.stackexchange.com/q/91112/2856
user2856