Lorsque j'utilise une boîte à outils python (.pyt) dans ArcMap, je suivrai généralement un modèle où le fichier .pyt lui-même est simplement un wrapper pour collecter les arguments d'entrée et définir les outils eux-mêmes. Le code pris en charge est conservé dans des modules testables unitairement séparés.
Exemple:
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)
Cela fonctionne très bien mais j'ai rencontré un problème frustrant pendant le développement. Cliquez avec le bouton droit -> Actualiser sur le .pyt dans ArcMap actualise uniquement le code du fichier .pyt. Il ne rafraîchit pas les modules importés, je dois donc fermer et rouvrir ArcMap chaque fois que je change quelque chose. Heureusement, puisque je teste le code indépendamment, je n'ai pas à le faire une tonne, mais c'est toujours un problème majeur. Y a-t-il un moyen de contourner cela? Assez lié - existe-t-il un moyen d'actualiser complètement la console Python (j'ai un package de site personnalisé dont je dois également fermer / rouvrir ArcMap pour y apporter également des modifications)?
J'utilise ArcMap 10.2.1.
la source
reload()
juste après l'importation du module de support, en haut du fichier PYT de la boîte à outils. Ainsi, si la boîte à outils contient plusieurs outils, je n'ai pas à dupliquer le rechargement dans laexecute()
fonction de chaque outil .from pyfile import Tool
, en ajoutant desreload(tool)
retourstypeError: reload() argument must be module
. Des idées?Voici une manière différente et plus robuste que celle que j'ai suggérée auparavant.
Je n'ai pas utilisé ce module moi-même, mais je pense que cela résoudrait votre problème:
Rechargeur de module Python
Étant donné l'exemple précédent, cela devrait charger toutes les dépendances avec un seul appel:
C'est la première fois que je remarque ce module, donc si vous l'implémentez dans vos outils, commentez comment il fonctionne pour vous.
la source