Cuando use una caja de herramientas de Python (.pyt) en ArcMap, normalmente seguiré un patrón en el que el archivo .pyt en sí mismo es simplemente un contenedor para recopilar argumentos de entrada y definir las propias herramientas. El código de soporte se mantiene en módulos separados que pueden probarse en unidades.
Ejemplo:
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)
Esto funciona muy bien, pero me he encontrado con un problema frustrante durante el desarrollo. Haga clic derecho -> Actualizar en .pyt en ArcMap solo actualiza el código del archivo .pyt. No actualiza los módulos importados, por lo que tengo que cerrar y volver a abrir ArcMap cada vez que cambie algo allí. Afortunadamente, como estoy probando el código de forma independiente, no tengo que hacer esto una tonelada, pero sigue siendo una molestia importante. ¿Hay alguna forma de evitar esto? Algo relacionado: ¿hay alguna forma de actualizar completamente la consola de Python (tengo un paquete de sitio personalizado que también debo cerrar / volver a abrir ArcMap para extraer los cambios también)?
Estoy usando ArcMap 10.2.1.
fuente
reload()
inmediatamente después de importar el módulo de soporte, en la parte superior del archivo PYT de la caja de herramientas. Por lo tanto, si la caja de herramientas contiene varias herramientas, no tengo que duplicar la recarga en laexecute()
función de cada herramienta .from pyfile import Tool
, agregandoreload(tool)
devolucionestypeError: reload() argument must be module
. ¿Algunas ideas?Aquí hay una forma diferente y más sólida de lo que sugerí antes.
No he usado este módulo yo mismo, pero creo que resolvería su problema:
Python Module Reloader
Dado el ejemplo anterior, esto debería cargar todas las dependencias con una llamada:
Esta es la primera vez que noto este módulo, así que si lo implementa en sus herramientas, comente qué tan bien funciona para usted.
fuente