Estoy trabajando con Django y uso Django shell todo el tiempo. La parte molesta es que mientras el servidor Django se recarga con los cambios de código, el shell no lo hace, así que cada vez que hago un cambio en un método que estoy probando, necesito salir del shell y reiniciarlo, volver a importar todos los módulos que necesito, reinicialice todas las variables que necesito, etc. Si bien el historial de iPython ahorra mucho tipeo en esto, esto sigue siendo un dolor. ¿Hay alguna manera de hacer que Django Shell se recargue automáticamente, de la misma manera que lo hace el servidor de desarrollo de Django?
Conozco reload(), pero importo muchos modelos y generalmente uso from app.models import *sintaxis, por lo que reload() no es de mucha ayuda.
Sugeriría usar la extensión de recarga automática de IPython .
./manage.py shell
In [1]: %load_ext autoreload
In [2]: %autoreload 2
Y a partir de ahora, todos los módulos importados se actualizarán antes de evaluar.
In [3]: from x import print_something
In [4]: print_something()
Out[4]: 'Something'
# Do changes in print_something method in x.py file.
In [5]: print_something()
Out[5]: 'Something else'
Funciona también si se importó algo antes %load_ext autoreloaddel comando.
./manage.py shell
In [1]: from x import print_something
In [2]: print_something()
Out[2]: 'Something'
# Do changes in print_something method in x.py file.
In [3]: %load_ext autoreload
In [4]: %autoreload 2
In [5]: print_something()
Out[5]: 'Something else'