6 votos

¿Cómo organizar mejor los archivos para una herramienta de script arcpy grande?

Estoy escribiendo una larga arcpy herramienta y estoy trabajando con múltiples secuencias de comandos de python, simplemente para la organización en sí misma. Todo funciona bien cuando se ejecuta desde la línea de comandos, pero ahora que estoy empezando a pensar acerca de la conversión de una herramienta de secuencia de comandos, me estoy haciendo un dolor de cabeza.

Mi anterior estructura: parameters.py - las listas de todos los globals (parámetros, funciones, variables)

a_functions.py, b_functions.py, etc. - listas de funciones para su uso en el código principal, las importaciones de los parámetros *

maincode.py - llama a las funciones de *_functions.py las importaciones de los parámetros *

La estructura es bastante claro, y aunque puede que no sea lo ideal, desde un punto de vista de la estructura de archivos, funciona bastante bien (por favor, timbre en si estoy haciendo algo terriblemente mal). Ahora que tengo que cargar un archivo en la herramienta de secuencia de comandos que define los parámetros, simplemente no me puedo mover todos los parámetros para el archivo de código principal, como el que necesito para importar como globales para el resto de los archivos, y la importación de con * también la importación de todos los locales a los globales maincode.py. Yo sólo podía mover todo en un solo archivo, sino que toda la organización se perdería y sería un lío. ¿Alguien tiene alguna sugerencia que ha construido una larga arcpy herramienta con múltiples archivos antes?

5voto

Lucas Puntos 128

Utilice una estructura de paquete . __init__.py puede contener las variables de alcance de su paquete. Los módulos del paquete pueden acceder a esas variables fácilmente, las secuencias de comandos de llamada pueden establecerlas si lo necesitan y todo está muy bien envuelto en un solo directorio.

p.ej

 #  |  mainscript.py
#  \--somepackage
#     |  __init__.py
#     |  script1.py
#     |  script2.py

#----------------------------
#mainscript.py
#----------------------------
import somepackage

#set some variables
somepackage.args=['a','b','c']
somepackage.kwargs={'d':1,'e':2,'f':3}

#Call some functions
somepackage.script1.main()
somepackage.script2.main()

#----------------------------
#somepackage.__init__.py
#----------------------------
__all__=['script1','script2']
import script1,script2

#Some defaults
args=[]
kwargs={}
somevar=1
anothervar=2

#----------------------------
#somepackage.script1.py
#----------------------------
import somepackage
def main():
    print somepackage.args
    print somepackage.somevar

#----------------------------
#somepackage.script2.py
#----------------------------
import somepackage
def main():
    print somepackage.kwargs
    print somepackage.anothervar
 

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