Recompiler Python Addin après avoir édité le script?

15

J'ai développé quelques compléments python et je me demande simplement quelle est la meilleure façon de recompiler le complément chaque fois que je modifie le script.

Actuellement, si je modifie le script, il semble que je doive

  1. Fermer ArcMap
  2. Accédez au dossier My addin et double-cliquez sur le fichier python 'makeaddin'
  3. Double-cliquez sur le «fichier complémentaire Python
  4. Redémarrez ArcMap pour que les modifications prennent effet

Si je ne fais pas ces étapes, les modifications ne sont pas reconnues. Cela devient assez ennuyeux et prend du temps lorsque je veux placer peut-être une simple ligne d'impression quelque part ou que je fais une petite modification juste pour tester un résultat.

Existe-t-il une meilleure façon de le faire?

Mike
la source

Réponses:

11

Vous pouvez utiliser la reloadfonction intégrée en python pour recharger automatiquement votre module. Ce que vous pouvez faire est quelque chose comme ceci:

import mymodule

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

hook()est ce qui est appelé par ArcMap et mymoduleest le module que vous modifiez entre les invocations. Vous devrez peut-être modifier sys.pathpour inclure le chemin du module que vous modifiez afin que import mymodulecela n'échoue pas. Ou incluez le répertoire site-packages(peut-être en utilisant python setup.py develop).

cwa
la source
1
Bien sûr, cela ne serait utile que pendant le développement; Je pense que les concepteurs d'ArcGIS ont l'intention que vous testiez votre script avant de créer le complément ( resources.arcgis.com/en/help/main/10.1/index.html#/… )
cwa
C'est ce que je fais aussi. J'utilise également winpdb pour le débogage intégré.
blah238
Merci pour la suggestion. C'est un peu au-delà de mes compétences. Est-il difficile à mettre en œuvre? Y a-t-il d'autres informations à ce sujet que je peux utiliser pour apprendre?
Mike
1
Je suis un développeur python avec une expérience ArcGIS limitée, mais je l'apprends. Je mettrai à jour avec plus de détails après les avoir compris.
cwa
@ blah238 comment avez-vous configuré le débogage intégré? Mon complément se connectera mais abandonnera la connexion après son chargement.
ShaunLangley
8

Selon la suggestion de @ blah238, le script suivant

  1. ferme ArcMap (s'il est ouvert)
  2. crée un complément
  3. installe le complément en mode silencieux
  4. rouvre le document ArcMap

Enregistrer dans le répertoire contenant 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)
Paul
la source
est-ce inclus dans votre fichier PythonTool_addin.py?
ShaunLangley
@ShaunLangley, non, il s'agit d'un fichier .py distinct résidant dans le répertoire de makeaddin.py
Paul
Grand script. Cependant, comme prévu, ArcMap tombe lorsque le script tente d'ouvrir le fichier .mxd en dehors d'ArcMap. Existe-t-il une solution connue à ce problème?
TheLastGIS
1
@TheLastGIS Oui. Ajoutez les variables arcmap = "C:/Program Files (x86)/ArcGIS/Desktop10.3/bin/ArcMap.exe"et Map = '"{0}" {1} /s'.format(arcmap, mapdoc)à ce qui précède. Alors os.system(Map)réussira là où os.system(mapdoc)ça ne marche pas.
alphabetasoup
2

J'ai reçu une réponse sur le site Web d'ArcGIS. Apparemment, c'est le seul moyen de recompiler des compléments python. Quelqu'un a enregistré une idée sur ArcGIS Ideas et j'ai également voté et commenté.

Le fil du forum de discussion ArcGIS se trouve ici .

Mike
la source
1
Pourriez-vous ajouter les liens pertinents à votre réponse?
blah238
Je voulais voter pour mais je n'ai pas trouvé l'idée ArcGIS mentionnée par @Mike.
PolyGeo
Désolé, je n'ai pas vu cette réponse jusqu'à présent. Merci @PolyGeo d'avoir mis à jour le lien vers le site Web ArcGIS.
Mike
1

J'utilise généralement deux approches: l'une consiste, pour tous les outils que vous utilisez qui ne sont vraiment que du géotraitement, à autoriser leur importation, puis vous pouvez configurer une session Python interactive et faire reload(mymodule)comme mentionné pour inclure les dernières modifications (ou configurer chargement automatique dans IPython ). Si vous apportez simplement des modifications à une boîte à outils Python, vous pouvez recharger la boîte à outils en cliquant dessus avec le bouton droit dans la vue Catalogue et en cliquant sur 'Actualiser'.

Pour le code qui nécessite une interaction utilisateur dans l'interface graphique, j'utilise le script de commandes suivant pour accélérer le processus:

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

Où myaddin.mxd a des couches de données et le contexte que j'utilise pour le projet spécifique. Cela déclenchera l'installation du complément et ArcMap simultanément, mais je peux généralement cliquer sur le bouton «Installer le complément» plus rapidement que le démarrage d'ArcGIS. Vous pouvez également ajouter pauseavant la dernière commande d'attendre la saisie avant de démarrer ArcGIS.

scw
la source
1
Vous pouvez utiliser ESRIRegAddIn.exeavec le /scommutateur pour installer le complément en mode silencieux. Le chemin vers ESRIRegAddIn sur ma machine est C:\Program Files (x86)\Common Files\ArcGIS\bin.
blah238