En algunas de mis aplicaciones Django, estoy usando un archivo settings_local.py
para anular las configuraciones que son diferentes en varios entornos (por ejemplo, desarrollo, prueba y producción). Originalmente He utilizado el siguiente código para incluir su contenido en el settings.py
:Python: 'import *' vs execfile
try:
from settings_local import *
except ImportError:
sys.stderr.write("The settings_local.py file is missing.\n")
DEBUG=False
he encontrado recientemente la función execfile
y cambiado a algo como:
try:
execfile(path.join(PROJECT_ROOT, "settings_local.py"))
except IOError:
sys.stderr.write("The settings_local.py file is missing.\n"
DEBUG=False
Tanto funciona como es debido, pero me Tengo curiosidad por saber si me falta algún truco y, en general, qué enfoque es más recomendable y por qué.
'__file__' se puede proporcionar fácilmente a través de argumentos. La principal diferencia es que un módulo se importa exactamente una vez, no importa cuántas veces se ejecute 'import module' (' exec' ejecuta el archivo cada vez que se llama), y 'import' no requiere una ruta explícita al archivo (entonces funcionaría dentro de un archivo zip también). – jfs
@ J.F.Sebastian Esa debería ser una respuesta. – Marcin
Una de las ventajas que encontré sobre execfile (a diferencia de la importación) es que puedo hacerlo de forma dinámica. Específicamente, si tengo una lista de módulos de configuración, puedo hacer un ciclo por la lista, llamando a execfile en cada uno. ¿Hay alguna manera de hacer eso con la importación en su lugar? –