Como pidió, lo mejor que puede hacer es
>>> from project.models.user import *
>>> import project # get module reference for reload
>>> reload(project.models.user) # reload step 1
>>> from project.models.user import * # reload step 2
sería mejor y más limpia si se ha utilizado el módulo de usuario directamente, en lugar de hacer import *
(que casi nunca es la forma correcta de hacerlo) . Entonces solo sería
>>> from project.models import user
>>> reload(user)
Esto haría lo que usted quisiera. Pero, no es muy agradable. Si realmente necesita volver a cargar los módulos con tanta frecuencia, tengo que preguntar: ¿por qué?
Mi sospecha (respaldada por la experiencia previa con personas que hacen preguntas similares) es que está probando su módulo. Hay muchas maneras de probar un módulo, y hacerlo a mano en el intérprete interactivo es una de las peores maneras. Guarde una de sus sesiones en un archivo y use doctest
, para una solución rápida. Alternativamente, escríbalo como un programa y usa python -i
. La única gran solución, sin embargo, es usar el módulo unittest
.
Si eso no es, con suerte es algo mejor, no peor. Realmente no hay un buen uso de reload
(de hecho, se elimina en 3.x). No funciona de manera efectiva. Puede volver a cargar un módulo pero dejar restos de versiones anteriores. Ni siquiera funciona en todo tipo de módulos: los módulos de extensión no se vuelven a cargar correctamente o, a veces, incluso se rompen de forma horrible cuando se vuelven a cargar.
El contexto de uso en el intérprete interactivo no deja muchas opciones en cuanto a lo que está haciendo, y cuál sería la mejor solución real.Fuera de él, a veces las personas usaban reload()
para implementar complementos, etc. Esto es peligroso en el mejor de los casos, y con frecuencia se puede hacer de manera diferente usando exec
(ah, el territorio malvado en el que nos encontramos), o un proceso segregado.
+1: Realmente no hay un buen uso de la recarga. –
Lo que estoy haciendo para encontrar esta pregunta, es que estoy usando la consola para explorar una estructura de datos importada de JSON. Quiero utilizar "recargar" para mantener algunas funciones en mi editor de texto que atraviesan la estructura de diferentes maneras, edítelas y vuelva a ejecutarlas, sin tener que salir de la consola. Aún así, si Python no puede soportar eso limpiamente, por razones de implementación como esta incapacidad para eliminar "sobras", creo que debo estar equivocado al querer hacerlo ;-p +1 por la respuesta que me permite hacerlo de todos modos, aunque. –
+1 por mostrarme que realmente debería escribir pruebas en lugar de hacer cosas en el intérprete a mano, incluso para afinar. Esto también sería útil para futuras pruebas de no regresión. –