При использовании набора инструментов Python (.pyt) в ArcMap я обычно буду следовать шаблону, в котором сам файл .pyt является просто оболочкой для сбора входных аргументов и определения самих инструментов. Вспомогательный код хранится в отдельных модульно-тестируемых модулях.
Пример:
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)
Это работает очень хорошо, но я столкнулся с одной неприятной проблемой во время разработки. Щелкните правой кнопкой мыши -> Обновить .pyt в ArcMap только обновляет код файла .pyt. Он не обновляет импортированные модули, поэтому мне приходится закрывать и снова открывать ArcMap всякий раз, когда я что-то там меняю. К счастью, так как я тестирую код самостоятельно, мне не нужно делать это тонну, но это все еще большая проблема. Есть ли способ обойти это? Несколько связано - есть ли способ полностью обновить консоль Python (у меня есть собственный пакет сайта, который я также должен закрыть / снова открыть ArcMap для получения изменений)?
Я использую ArcMap 10.2.1.
источник
reload()
сразу после импорта модуля поддержки, в верхней части PYT-файла панели инструментов. Таким образом, если набор инструментов содержит несколько инструментов, мне не нужно дублировать перезагрузку в каждойexecute()
функции инструмента .from pyfile import Tool
, добавивreload(tool)
возвращаетсяtypeError: reload() argument must be module
. Есть идеи?Вот другой и более надежный способ, чем я предлагал ранее.
Я не использовал этот модуль сам, но думаю, что он решит вашу проблему:
Модуль Python Reloader
Учитывая предыдущий пример, это должно загрузить все зависимости одним вызовом:
Это первый раз, когда я заметил этот модуль, поэтому, если вы внедрите его в свои инструменты, прокомментируйте, насколько хорошо он работает для вас.
источник