Suggerirei di utilizzare l' estensione di caricamento automatico IPython .
./manage.py shell
In [1]: %load_ext autoreload
In [2]: %autoreload 2
E da ora tutti i moduli importati verranno aggiornati prima di valutare.
In [3]: from x import print_something
In [4]: print_something()
Out[4]: 'Something'
In [5]: print_something()
Out[5]: 'Something else'
Funziona anche se qualcosa è stato importato prima 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'
È anche possibile impedire l'aggiornamento di alcune importazioni con il %aimport
comando e 3 strategie di caricamento automatico:
% autoreload
- Ricarica automaticamente tutti i moduli (eccetto quelli esclusi da% aimport) ora.
% autoreload 0
- Disabilita il ricaricamento automatico.
% autoreload 1
- Ricarica tutti i moduli importati con% aimport ogni volta prima di eseguire il codice Python digitato.
% autoreload 2
- Ricarica tutti i moduli (eccetto quelli esclusi da% aimport) ogni volta prima di eseguire il codice Python digitato.
% aimport
- Elenca i moduli che devono essere importati automaticamente o che non devono essere importati.
% aimport foo
- Importa il modulo 'pippo' e contrassegnalo per essere caricato automaticamente per% autoreload 1
% aimport -foo
- Contrassegna il modulo 'pippo' per non essere caricato automaticamente.
Questo generalmente funziona bene per il mio uso, ma ci sono alcuni cavetas:
- La sostituzione degli oggetti di codice non sempre riesce: cambiare una proprietà @ in una classe in un metodo ordinario o un metodo in una variabile membro può causare problemi (ma solo nei vecchi oggetti).
- Le funzioni che vengono rimosse (ad es. Tramite monkey-patch) da un modulo prima che venga ricaricato non vengono aggiornate.
- I moduli di estensione C non possono essere ricaricati e quindi non possono essere caricati automaticamente.