15 votos

¿Volver a compilar Python Addin después de editar el script?

He estado desarrollando un par de complementos de python y me pregunto ¿cuál es la mejor manera de re-compilar el complemento en cualquier momento puedo editar el script.

En la actualidad, si puedo hacer alguna modificación en la secuencia de comandos, me parece que se han a

  1. Cerca De ArcMap
  2. Ir a Mi complemento carpeta y haz doble clic en "makeaddin' archivo de python
  3. Haga doble clic en el 'Python Archivo Addin
  4. Reinicie ArcMap para que los cambios entren en vigor

Si no hago estos pasos, entonces las ediciones no son reconocidas. Esto se pone muy molesto y consume mucho tiempo cuando quiero colocar tal vez una simple línea de impresión a algún lugar, o tengo que hacer una pequeña modificación para probar un resultado.

Hay una manera mejor de hacer esto?

11voto

Proteus Puntos 1

Usted puede utilizar el grupo builtin reload función en python para volver a cargar automáticamente el módulo. Lo que puedes hacer es algo como esto:

import mymodule

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

donde hook() es lo que se llama por ArcMap y, mymodule es el módulo que estás editando entre invocaciones. Puede que tenga que editar sys.path a incluir la ruta de acceso del módulo que está editando para que import mymodule no falla. O incluir el directorio en site-packages (tal vez usando python setup.py develop).

8voto

Örjan Jämte Puntos 3127

Por sugerencia de @blah238, el siguiente script

  1. cierra ArcMap (si está abierta)
  2. crea Add-in
  3. instala Add-en silencio
  4. vuelve a abrir el documento de ArcMap

Guardar en directorio que contiene los 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)

2voto

BigCanOfTuna Puntos 210

He recibido una respuesta en el sitio web de ArcGIS. Al parecer se trata de la única manera de volver a compilar python addins. Alguien ha registrado una idea en ArcGIS Ideas y he votado para arriba y así, comentó.

Hilo del Foro de discusión de ArcGIS se encuentra aquí.

1voto

Robert Höglund Puntos 5572

Yo por lo general uso de dos enfoques: uno es, para cualquiera de las herramientas que utiliza que son realmente de geoprocesamiento, que les permitan ser importados y, a continuación, puede configurar un sistema interactivo de Python sesión, y hacer reload(mymodule) como se mencionó para incluir los cambios más recientes (o configurar autoreload en IPython). Si usted se acaba de hacer cambios a una caja de herramientas de Python, puede volver a cargar la caja de herramientas haciendo clic derecho sobre ella en la vista de Catálogo y hacer clic en "Actualizar".

Para el código que no requieren la interacción del usuario en la interfaz gráfica de usuario, yo utilice la siguiente secuencia de comandos 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 ha capas de datos y el contexto que yo uso para el proyecto específico. Esto disparará el complemento de instalar y de ArcMap al mismo tiempo, pero por lo general se puede hacer clic en la opción " Instalar Complemento en el botón más rápido que ArcGIS comienza. Alternativamente, usted puede agregar pause antes de que el último comando que esperar para la entrada antes de la partida de ArcGIS.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X