Je code avec Python depuis plusieurs mois maintenant et j'ai développé des scripts assez complexes pour des tâches principalement de géotraitement. Cela étant dit, j'apprends encore beaucoup car je viens d'un arrière-plan SQL / VBA / VBScript.
Je sais que le code compilé s'exécute généralement plus rapidement que le code qui doit être traité par un interpréteur de langage, donc je suis intéressé par la possibilité de compiler un script Python de géotraitement dans un fichier .EXE pour travailler avec des données volumineuses.
Est-ce seulement possible? Si tel est le cas, quelle est la meilleure façon de compiler un script Python (.py) qui importe les modules arcgisscripting ou arcpy?
J'ai passé quelques minutes à essayer de trouver ce que je voulais faire et la recherche a renvoyé cet article entre autres: http://www.ehow.com/how_2091641_compile-python-code.html
Le compilateur semblait fonctionner, mais lors de l'exécution du fichier .EXE résultant, il a donné une erreur cryptique indiquant que certains fichiers n'étaient pas disponibles.
Le script Python exécute ce qui semble être assez bien à partir de la ligne de commande, mais je me demande si je pourrais voir une légère amélioration si je pouvais compiler le fichier .py. Encore une fois, je travaille avec des ensembles de données volumineux qui prennent plus de 20 heures à traiter (délimiter les bassins versants des sites d'échantillonnage de la qualité de l'eau). Je vais prendre tout ce que je peux pour améliorer.
Le script s'est exécuté 10% plus rapidement en dehors d'ArcGIS à partir de la ligne de commande à l'aide d'un ensemble de sites de test par rapport à la configuration du script en tant qu'outil de script dans une nouvelle boîte à outils dans ArcCatalog. J'ai exécuté le script à partir de la ligne de commande sans aucune instance d'ArcGIS ouverte sur une machine dédiée.
Alors, est-il possible de compiler des scripts Python qui importent le module arcgisscripting et qui appellent les outils ArcToolBox?
ÉDITER
Merci pour la contribution, cela m'a été utile. Le script est en grande partie un moyen de coordonner un certain nombre d'outils ArcGIS et de produire dans les formats / emplacements souhaités / avec l'attribution appropriée. J'ai déjà coupé du gras en écrivant dans un dossier de travail au lieu d'une géodatabase personnelle de travail pour certains fichiers raster intermédiaires afin qu'ils puissent être stockés au format ESRI GRID par rapport au format IMG. Je vais cependant consulter les suggestions du profileur.
Il y en a dans mon bureau qui remettent en question Python disant "que le code compilé est tellement plus rapide que le code passant par un interpréteur" principalement en comparaison, disons, avec un programme Visual Basic compilé ou un programme VB.NET, mais c'est un bon point que les outils vont prendre du temps de toute façon. Et, il semble qu'avec les machines informatiques actuelles, le code interprété ne soit pas beaucoup plus lent que le code compilé pour justifier d'aller plus loin.
EDIT - mise à jour sur l'optimisation du programme avec des formats raster.
Je voulais suivre mon "optimisation" de ce programme Python, et j'ai pu gagner 2 heures de temps de traitement en écrivant des rasters intérimaires au format GRID au lieu d'une géodatabase personnelle. Non seulement cela, il y a eu une réduction SIGNIFICATIVE de la consommation d'espace disque de la taille des données. L'exécution d'origine que j'ai faite pour écrire tous les rasters (et ce n'étaient que des entités ponctuelles converties en rasters, puis des rasters de bassin versant) a donné 37,1 Go de données uniquement pour ces fichiers. L'écriture des deux dernières sorties de données dans un dossier au format GRID a été réduite à 667 Mo de données.
Je serais curieux de voir comment un fichier GDB gérerait ces données, mais principalement en fonction de la taille des données. Mais, réduire mon temps de traitement de 9,5 heures à 7,5 heures est certainement suffisant pour plaider en faveur du traitement des rasters en dehors des géodatabases au format GRID.