Afin de réduire le temps de développement de mon application web basée sur Python, j'essaie d'utiliser reload() pour les modules que j'ai récemment modifiés. Le reload() passe par une page web dédiée (partie de la version de développement de l'application web) qui liste les modules qui ont été récemment modifiés (et l'horodatage modifié du fichier py est postérieur au fichier pyc correspondant). La liste complète des modules est obtenue à partir de sys.modules (et je filtre la liste pour me concentrer uniquement sur les modules qui font partie de mon paquet).comment trouver la liste des modules qui dépendent d'un module spécifique en python
Le rechargement de fichiers python individuels semble fonctionner dans certains cas et pas dans d'autres. Je suppose que tous les modules qui dépendent d'un module modifié devraient être rechargés et que le rechargement devrait se faire dans le bon ordre.
Je cherche un moyen d'obtenir la liste des modules importés par un module spécifique. Y a-t-il un moyen de faire ce genre d'introspection en Python? Je comprends que mon approche pourrait ne pas être garantie à 100% et le moyen le plus sûr serait de tout recharger, mais si une approche rapide fonctionne dans la plupart des cas, elle serait suffisante pour le développement.
Réponse aux commentaires concernant django autoreloader
@Glenn Maynard, Thanx, j'avais lu le autoreloader de django. Mon application Web est basée sur Zope 3 et avec le nombre de paquets et beaucoup d'initialisations basées sur ZCML, le redémarrage total prend environ 10 secondes à 30 secondes ou plus si la taille de la base de données est plus grande. J'essaye de réduire ce temps passé pendant le redémarrage. Quand je sens que j'ai fait beaucoup de changements, je préfère habituellement faire un redémarrage complet, mais le plus souvent je change quelques lignes ici et là pour lesquelles je ne veux pas passer autant de temps. La configuration du développement est complètement indépendante de la configuration de la production et généralement, si quelque chose ne va pas dans le rechargement, cela devient évident puisque les pages de l'application commencent à montrer des informations illogiques ou à lancer des exceptions. Je suis très intéressé à explorer si le rechargement sélectif fonctionnerait ou non.
Il est beaucoup plus sûr de faire quelque chose comme le autoreloader de Django, qui ré-exécute entièrement le backend quand un fichier source est modifié. Je ne connais aucun désavantage; vous modifiez un fichier et tout est rechargé une seconde ou deux plus tard, automatiquement. Quelque chose qui ne fonctionne que dans la «plupart des cas» est très mauvais pour le développement; vous demandez simplement d'être mordu douloureusement sur la route quand ce n'est pas le cas. –
Revisiter ici en raison d'une question en double, et en ajoutant que "la façon de minimiser le temps de rechargement lors de l'utilisation de zope" est d'utiliser sauna.reload maintenant (2013) – jsbueno