Llevo varios meses codificando con Python y he desarrollado algunos scripts razonablemente complejos para tareas de geoprocesamiento principalmente. Dicho esto, todavía estoy aprendiendo mucho ya que provengo de un fondo SQL / VBA / VBScript.
Sé que el código compilado generalmente se ejecuta más rápido que el código que debe ser procesado por un intérprete de idiomas, por lo que estoy interesado en la posibilidad de compilar un script Python de geoprocesamiento en un archivo .EXE para trabajar con grandes datos.
¿Es esto posible? Si es así, ¿cuál es la mejor manera de compilar un script de Python (.py) que está importando los módulos arcgisscripting o arcpy?
Pasé unos minutos tratando de encontrar lo que quiero hacer y la búsqueda devolvió este artículo, entre otros: http://www.ehow.com/how_2091641_compile-python-code.html
El compilador parecía funcionar, pero al ejecutar el archivo .EXE resultante, dio un error críptico diciendo que algunos archivos no estaban disponibles.
El script de Python ejecuta lo que parece razonablemente bien desde la línea de comandos, pero me pregunto si podría ver una ligera mejora si pudiera compilar el archivo .py. Nuevamente, estoy trabajando con algunos grandes conjuntos de datos que están tardando más de 20 horas en procesarse (delinear las cuencas hidrográficas de los sitios de muestreo de calidad del agua de entrada). Tomaré todo lo que pueda para mejorar.
El guión corrió 10% más rápido fuera de ArcGIS desde la línea de comandos usando una prueba de conjunto de sitios de comparación de configurarlo como una herramienta de secuencia de comandos en una nueva caja de herramientas en ArcCatalog. He estado ejecutando el script desde la línea de comando sin ninguna instancia de ArcGIS abierta en una máquina dedicada.
Entonces, ¿es posible compilar scripts Python que importen el módulo arcgisscripting y que llamen herramientas ArcToolBox?
EDITAR
Gracias por el aporte, esto es útil para mí. La secuencia de comandos es en gran medida una forma de coordinar una serie de herramientas de ArcGIS y generar en los formatos / ubicaciones deseados / con la atribución adecuada. Creo que ya he recortado un poco de grasa escribiendo en una carpeta temporal en lugar de una geodatabase personal temporal para algunos archivos raster intermedios para que puedan almacenarse en el formato ESRI GRID frente al formato IMG. Sin embargo, revisaré las sugerencias de perfil.
Hay algunos en mi oficina que cuestionan a Python diciendo "que el código compilado es mucho más rápido que el código que se ejecuta a través de un intérprete" principalmente en comparación con, digamos, un programa compilado de Visual Basic o VB.NET, pero ese es un buen punto que las herramientas van a tomar tiempo de cualquier manera. Y, parece que con las máquinas informáticas actuales, el código interpretado puede no ser mucho más lento que el código compilado para garantizar un esfuerzo adicional.
EDITAR : actualización sobre la optimización del programa con formatos ráster.
Quería dar seguimiento a mi "optimización" de este programa de Python, y pude ahorrar 2 horas de tiempo de procesamiento escribiendo rásteres provisionales en formato GRID en lugar de en una geodatabase personal. No solo eso, hubo una reducción SIGNIFICATIVA en el consumo de espacio en disco del tamaño de datos. La ejecución original que escribí todos los rásteres (y solo eran entidades de puntos convertidas en rásteres, y luego rásteres de cuenca) resultó en 37.1 GB de datos solo para esos archivos. Escribir las últimas dos salidas de datos en una carpeta en formato GRID se redujo a 667 MB de datos.
Sería curioso ver cómo un archivo GDB manejaría estos datos, aunque principalmente en forma del tamaño de los datos. Pero, reducir mi tiempo de procesamiento de 9.5 horas a 7.5 horas ciertamente es suficiente para abogar por tratar con rásteres fuera de las geodatabases en el formato GRID.