¿Re-compilando Python Addin después de editar el script?

15

He estado desarrollando algunos complementos de Python y me pregunto cuál es la mejor manera de volver a compilar el complemento cada vez que edito el script.

Actualmente, si hago una edición al script, parece que tengo que hacerlo

  1. Cerrar ArcMap
  2. Vaya a la carpeta Mi complemento y haga doble clic en el archivo python 'makeaddin'
  3. Haga doble clic en el 'Archivo de complementos de Python
  4. Reinicie ArcMap para que los cambios entren en vigencia

Si no hago estos pasos, entonces las ediciones no se reconocen. Esto se vuelve bastante molesto y consume mucho tiempo cuando quiero colocar una línea de impresión simple en algún lugar o hacer una pequeña edición solo para probar un resultado.

¿Hay una mejor manera de hacer esto?

    
pregunta Mike 21.02.2013 - 00:15

4 respuestas

11

Puedes usar la función incorporada reload en python para recargar automáticamente tu módulo. Lo que puedes hacer es algo como esto:

import mymodule

def hook():
    reload(mymodule)
    mymodule.myfunction()

donde hook() es lo que llama ArcMap y mymodule es el módulo que está editando entre invocaciones. Es posible que tenga que editar sys.path para incluir la ruta del módulo que está editando para que import mymodule no falle. O incluya el directorio en site-packages (tal vez usando python setup.py develop ).

    
respondido por el cwa 21.02.2013 - 00:45
8

La sugerencia de Per @ blah238, el siguiente script

  1. cierra ArcMap (si está abierto)
  2. crea un complemento
  3. instala el complemento en silencio
  4. vuelve a abrir el documento de ArcMap

Guardar en el directorio que contiene makeaddin.py:

import os

#Location of ESRIRegAddIn.exe
esri = "C:/Program Files (x86)/Common Files/ArcGIS/bin/ESRIRegAddIn.exe"
cwd = os.getcwd()
mapdoc = <path to mxd>

#Close ArcMap if it is open
try:    os.system("TASKKILL /F /IM ArcMap.exe")
except:    pass

#Create ESRI Add-in file
os.system(os.path.join(cwd, "makeaddin.py"))

#Silently install Add-in file. The name of the file is based on folder it's located in.
os.system('"{0}" {1} /s'.format(esri, os.path.split(cwd)[-1] + ".esriaddin"))

#Open test map document.
os.system(mapdoc)
    
respondido por el Paul 01.08.2013 - 21:13
2

Recibí una respuesta en el sitio web de ArcGIS. Al parecer, esta es la única manera de volver a compilar complementos de Python. Alguien ha registrado una idea en ArcGIS Ideas y también he votado y comentado.

El hilo del foro de discusión de ArcGIS se encuentra aquí .

    
respondido por el Mike 21.02.2013 - 00:41
1

Generalmente, utilizo dos enfoques: uno es, para cualquier herramienta que use que sea solo geoprocesamiento, permita que se importen, y luego puede configurar una sesión interactiva de Python, y hacer reload(mymodule) como se mencionó para incluir el cambios más recientes (o configure carga automática en IPython ). Si solo está realizando cambios en una caja de herramientas de Python, puede volver a cargar la caja de herramientas haciendo clic derecho sobre ella en la vista Catálogo y haciendo clic en 'Actualizar'.

Para el código que requiere la interacción del usuario en la GUI, uso el siguiente script por lotes para acelerar el proceso:

@echo off
echo building...
python makeaddin.py
echo installing...
start myaddin.esriaddin
echo load ArcMap...
start %HOMEDRIVE%%HOMEPATH%\Documents\ArcGIS\myaddin.mxd

Donde myaddin.mxd tiene capas de datos y contexto que utilizo para el proyecto específico. Esto activará la instalación del complemento y ArcMap simultáneamente, pero generalmente puedo hacer clic en el botón 'Instalar complemento' más rápido que ArcGIS. Alternativamente, puede agregar pause antes del último comando para esperar la entrada antes de iniciar ArcGIS.

    
respondido por el scw 05.06.2013 - 00:39

Lea otras preguntas en las etiquetas