Вказівки щодо організації Python Toolboxes (.pyt) в ArcGIS


17

Для одного із моїх завдань мені потрібно створити панель інструментів з трьома інструментами (сценарії пітона).

Замість звичайного tbx я вирішив записати його як Python Toolbox (pyt).

Все зрозуміло, крім «хорошого» способу організації коду.

Оскільки у мене є три інструменти, це не дуже гарний спосіб зберігати їх в одному файлі (pyt). Отже, я вирішив зберігати кожен інструмент в окремому файлі .py.

Ось проблема: який хороший спосіб організувати декілька файлів з PYT для розповсюдження чи розгортання на ArcGIS for Server? Чи потрібно тримати їх на одному рівні з файлом PYT чи слід розміщувати їх у якомусь підкаталозі (тобто "Інструменти")?

Чи можете ви порекомендувати будь-які вказівки Esri або довідник зразка "великий інструментарій PYT"?

Я нічого не знайшов на цю тему. У версії 10.0 існувала так звана структура папок ToolShare, яку я використовував.

Це більше питання стилю кодування. Тому що ідея створити один файл PYT з 500-1000 і більше рядків коду мені не виглядає добре, і я вважаю, що це не "пітонічний" спосіб.


1
"ідея створити один файл PYT з 500-1000 і більше рядків коду мені не виглядає добре". Ти не один, Алекс. Сьогодні я швидко заявив, що .pyt - це винахід хворого розуму. І я не пошкодую.
Remigijus Pankevičius

Відповіді:


17

Подивіться цю тему на форумі ArcGIS. В основному просто використовуйте стандартні модулі python або структуру пакету та імпортуйте ваші інструменти в панель інструментів python.

Щось на зразок:

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

Я виявив, що це працює добре в ArcGIS Desktop, але, публікуючи службу геообробки в екземплярі сервера ArcGIS, вона втрачає всі сценарії та пакети, крім файлу .pyt. Можна скинути сценарії в розгортання вручну, але це збільшує складність.
Гнат

3
@Gnat Так, думки Лука також мій досвід. Видавничі служби ESRI не визнають жодного зі from x import yстилів імпорту. (Це, до речі, зовсім смішно.) Однак я вважаю, що ви можете залишити своє self.toolsвизначення у спокої та використати import toolpackage.script_a.Tool1 as Tool1.
jpmc26

1
Псевдонім повинен бути коротким і містити лише літери, тобто self.alias = "mtt"
Кертіс Ціна

2
Оскільки я щойно провів годину, вносячи зміни до свого інструментального коду і намагаючись, здається, це відображається в інструменті gui в Arcmap, я хотів би поділитися цим. Якщо ви внесете зміни у свій код поза файлом pyt і хотіли б, щоб це відображалося в інструменті gui, вам доведеться перезапустити ArcMap / Catalog. Ви можете натиснути оновити на панелі інструментів все, що завгодно, що, здається, перезавантажує сам pyt. Він не знайде зміни до іншого коду.
TurboGus

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.