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'
In [5]: print_something()
Out[5]: 'Something else'
También funciona si se importó algo antes del %load_ext autoreload
comando.
./manage.py shell
In [1]: from x import print_something
In [2]: print_something()
Out[2]: 'Something'
In [3]: %load_ext autoreload
In [4]: %autoreload 2
In [5]: print_something()
Out[5]: 'Something else'
También es posible evitar que algunas importaciones se %aimport
actualicen con el comando y 3 estrategias de recarga automática:
% de recarga automática
- Vuelva a cargar todos los módulos (excepto los excluidos por% aimport) automáticamente ahora.
% de recarga automática 0
- Desactive la recarga automática.
% autorrecarga 1
- Vuelva a cargar todos los módulos importados con% aimport cada vez antes de ejecutar el código Python escrito.
% de recarga automática 2
- Vuelva a cargar todos los módulos (excepto los excluidos por% aimport) cada vez antes de ejecutar el código Python escrito.
% puerto objetivo
- Enumere los módulos que se van a importar automáticamente o que no se van a importar.
% aimport foo
- Importe el módulo 'foo' y márquelo para que se recargue automáticamente para% autoreload 1
% aimport -foo
- Marque el módulo 'foo' para que no se recargue automáticamente.
Esto generalmente funciona bien para mi uso, pero hay algunas advertencias:
- Reemplazar objetos de código no siempre es exitoso: cambiar una @property en una clase a un método ordinario o un método a una variable miembro puede causar problemas (pero solo en objetos antiguos).
- Las funciones que se eliminan (por ejemplo, mediante el parche de mono) de un módulo antes de volver a cargarlo no se actualizan.
- Los módulos de extensión C no se pueden recargar y, por lo tanto, no se pueden recargar automáticamente.