Saya sarankan menggunakan ekstensi autoreload IPython .
./manage.py shell
In [1]: %load_ext autoreload
In [2]: %autoreload 2
Dan mulai sekarang semua modul yang diimpor akan disegarkan sebelum dievaluasi.
In [3]: from x import print_something
In [4]: print_something()
Out[4]: 'Something'
In [5]: print_something()
Out[5]: 'Something else'
Bekerja juga jika ada sesuatu yang diimpor sebelum %load_ext autoreload
perintah.
./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'
Ada juga kemungkinan mencegah beberapa impor dari %aimport
refresh dengan perintah dan 3 strategi autoreload:
% autoreload
- Muat ulang semua modul (kecuali yang dikecualikan oleh% aimport) secara otomatis sekarang.
% autoreload 0
- Nonaktifkan pemuatan ulang otomatis.
% autoreload 1
- Muat ulang semua modul yang diimpor dengan% aimport setiap kali sebelum menjalankan kode Python yang diketik.
% autoreload 2
- Muat ulang semua modul (kecuali yang dikecualikan oleh% aimport) setiap kali sebelum menjalankan kode Python yang diketik.
% aimport
- Daftar modul yang akan diimpor secara otomatis atau tidak untuk diimpor.
% aimport foo
- Impor modul 'foo' dan tandai sebagai dimuat otomatis untuk% autoreload 1
% aimport -foo
- Tandai modul 'foo' untuk tidak dimuat otomatis.
Ini biasanya berfungsi baik untuk saya gunakan, tetapi ada beberapa cavetas:
- Mengganti objek kode tidak selalu berhasil: mengubah @property di kelas menjadi metode biasa atau metode ke variabel anggota dapat menyebabkan masalah (tetapi hanya di objek lama).
- Fungsi yang dihapus (mis. Melalui monkey-patching) dari modul sebelum dimuat ulang tidak akan ditingkatkan.
- Modul ekstensi C tidak dapat dimuat ulang, sehingga tidak dapat dimuat secara otomatis.