Ich würde vorschlagen, IPython zu verwenden Autoreload-Erweiterung .
./manage.py shell
In [1]: %load_ext autoreload
In [2]: %autoreload 2
Und von nun an werden alle importierten Module vor der Auswertung aufgefrischt.
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'
Funktioniert auch, wenn vorher etwas importiert wurde %load_ext autoreload
Befehl.
./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'
Es ist auch möglich, einige Importe an der Auffrischung mit %aimport
Befehl und 3 Strategien zum automatischen Laden:
%Auto-Laden
- Alle Module (außer denen, die durch %aimport ausgeschlossen wurden) automatisch neu laden jetzt.
%Auto-Laden 0
- Deaktivieren Sie das automatische Nachladen.
%Auto-Laden 1
- Laden Sie alle mit %aimport importierten Module jedes Mal neu, bevor Sie die den getippten Python-Code ausführt.
%Auto-Laden 2
- Alle Module (außer denen, die durch %aimport ausgeschlossen wurden) werden jedes Mal neu geladen bevor der eingegebene Python-Code ausgeführt wird.
%aimport
- Auflistung der Module, die automatisch importiert werden sollen bzw. nicht importiert werden sollen importiert werden sollen.
%aimport foo
- Modul 'foo' importieren und für %autoreload 1 zum automatischen Laden markieren
%aimport -foo
- Markieren Sie das Modul 'foo', damit es nicht automatisch geladen wird.
Für meine Zwecke funktioniert das im Allgemeinen gut, aber es gibt einige Einschränkungen:
- Das Ersetzen von Code-Objekten ist nicht immer erfolgreich: Das Ändern einer @Eigenschaft in einer Klasse in eine gewöhnliche Methode oder einer Methode in eine Mitgliedsvariable kann Probleme verursachen (allerdings nur in alten Objekten).
- Funktionen, die (z.B. über monkey-Parcheando) aus einem Modul entfernt werden, bevor es neu geladen wird, werden nicht aktualisiert.
- C-Erweiterungsmodule können nicht nachgeladen werden und können daher auch nicht automatisch geladen werden.
2 Stimmen
Sie sollten diese Frage aktualisieren und die Antwort "django-extensions" als richtig markieren.
1 Stimmen
Erst wenn es für mich tatsächlich funktioniert. Ich habe die Erweiterungen installiert, aber keiner meiner Codes wird automatisch neu geladen, und in den shell_plus-Dokumenten wird das automatische Laden nicht erwähnt. Es scheint, dass es einen Reloader im runserver_plus-Befehl gibt, aber das ist nicht das, wonach ich suche.