Je suggère d'utiliser l' extension de chargement automatique IPython .
./manage.py shell
In [1]: %load_ext autoreload
In [2]: %autoreload 2
Et à partir de maintenant, tous les modules importés seront actualisés avant d'être évalués.
In [3]: from x import print_something
In [4]: print_something()
Out[4]: 'Something'
In [5]: print_something()
Out[5]: 'Something else'
Fonctionne également si quelque chose a été importé avant la %load_ext autoreload
commande.
./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'
Il est également possible d'empêcher l'actualisation de certaines importations avec la %aimport
commande et 3 stratégies de chargement automatique:
% chargement automatique
- Rechargez tous les modules (sauf ceux exclus par% aimport) automatiquement maintenant.
% chargement automatique 0
- Désactivez le rechargement automatique.
% chargement automatique 1
- Rechargez tous les modules importés avec% aimport à chaque fois avant d'exécuter le code Python tapé.
% chargement automatique 2
- Rechargez tous les modules (sauf ceux exclus par% aimport) à chaque fois avant d'exécuter le code Python tapé.
% aimport
- Liste des modules qui doivent être importés automatiquement ou non.
% aimport foo
- Importez le module 'foo' et marquez-le comme étant chargé automatiquement pour% autoreload 1
% aimport -foo
- Marquer le module «foo» pour ne pas être chargé automatiquement.
Cela fonctionne généralement bien pour mon utilisation, mais il y a quelques cavetas:
- Le remplacement des objets de code ne réussit pas toujours: changer une propriété @ dans une classe en une méthode ordinaire ou une méthode en une variable membre peut poser des problèmes (mais dans les anciens objets uniquement).
- Les fonctions supprimées (par exemple via monkey-patching) d'un module avant qu'il ne soit rechargé ne sont pas mises à jour.
- Les modules d'extension C ne peuvent pas être rechargés et ne peuvent donc pas être rechargés automatiquement.