Ao usar uma caixa de ferramentas python (.pyt) no ArcMap, normalmente seguirei um padrão em que o próprio arquivo .pyt é simplesmente um invólucro para coletar argumentos de entrada e definir as próprias ferramentas. O código de suporte é mantido em módulos testáveis por unidade separados.
Exemplo:
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)
Isso funciona muito bem, mas encontrei um problema frustrante durante o desenvolvimento. Clique com o botão direito do mouse -> Atualizar no .pyt no ArcMap apenas atualiza o código do arquivo .pyt. Ele não atualiza os módulos importados, por isso tenho que fechar e reabrir o ArcMap sempre que alterar alguma coisa lá. Felizmente, como estou testando o código de forma independente, não preciso fazer isso muito, mas ainda é um grande aborrecimento. Existe alguma maneira de contornar isso? Um pouco relacionado - existe alguma maneira de atualizar completamente o console do Python (eu tenho um pacote de sites personalizado que também devo fechar / reabrir o ArcMap para obter alterações também)?
Estou usando o ArcMap 10.2.1.
fonte
reload()
imediatamente após a importação do módulo de suporte, na parte superior do arquivo PYT da caixa de ferramentas. Portanto, se a caixa de ferramentas contiver várias ferramentas, não preciso duplicar a recarga naexecute()
função de cada ferramenta .from pyfile import Tool
, adicionandoreload(tool)
retornostypeError: reload() argument must be module
. Alguma ideia?Aqui está uma maneira diferente e mais robusta do que sugeri antes.
Eu não usei esse módulo, mas acho que resolveria o seu problema:
Recarregador de módulo Python
Dado o exemplo anterior, isso deve carregar todas as dependências com uma chamada:
Esta é a primeira vez que notei este módulo; portanto, se você o implementar em suas ferramentas, comente novamente como ele funciona bem para você.
fonte