Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Interpreteur et rafraichissement d'un module

3 réponses
Avatar
Vincent Hiribarren
Bonjour à tous,

j'ai peut-être râté quelque chose dans la documentation, mais voici
mon problème : comment peut-on rafraichir un module importé dans
l'interpréteur python ?

En effet, je développe un petit module dont je teste les fonctions via
l'interpréteur. Et en cas de bug, je corrige bien sûr le script,
mais... je ne sais pas comment prévenir l'interpréteur que le script
est modifié. Et à part quitter l'interpréteur, puis revenir, je ne
vois pas comment faire.

Bien sûr, je peux lancer la fonction directement via un autre script,
ou via le script lui même, mais la réponse m'intéresse.

Des idées ? Merci d'avance.

--
Paumé sur Usenet-Fr ? Un seul site ! http://www.alea.net/usenet/
Un peu de zic pour se détendre ? http://julien.robinson.free.fr/

3 réponses

Avatar
Sébastien Kirche
Le 10 juillet 2005 à 14:07, Vincent Hiribarren a formulé :

j'ai peut-être râté quelque chose dans la documentation, mais voici
mon problème : comment peut-on rafraichir un module importé dans
l'interpréteur python ?


reload(le_module)

Mais dans mon expérience cela ne fonctionne pas à tous les coups (?).
Quelquefois ça passe en supprimant le .pyc avant de recharger.

Et il faut que le module ait été chargé sans erreur. Sinon il faut
réimporter.

HTH
--
Sébastien Kirche

Avatar
William Dode
On 10-07-2005, Vincent Hiribarren wrote:
Bonjour à tous,

j'ai peut-être râté quelque chose dans la documentation, mais voici
mon problème : comment peut-on rafraichir un module importé dans
l'interpréteur python ?

En effet, je développe un petit module dont je teste les fonctions via
l'interpréteur. Et en cas de bug, je corrige bien sûr le script,
mais... je ne sais pas comment prévenir l'interpréteur que le script
est modifié. Et à part quitter l'interpréteur, puis revenir, je ne
vois pas comment faire.


A cette adresse tu trouvera un exemple d'auto-reload :

http://www.cherrypy.org/wiki/AutoReload

--
William Dodé - http://flibuste.net

Avatar
Fabrice Clement
Bonjour,

Si ton module s'appelle monmodule et si tu l'as importé avec un:
import monmodule




alors tu peux faire:
reload(monmodule)




Si par contre tu as fait:
from monmodule import *




alors là il te faut faire:
import sys
del sys.modules['monmodule']
from monmodule import *





Je te conseille cependant d'écrire tes tests dans un fichier
(test_monmodule.py par exemple) qui commence par:

# -*- coding: utf-8 -*-
if not __name__ == '__main__':
import sys
try:
del sys.modules['monmodule']
print "Chargement forcé de 'monmodule'"
except KeyError :
pass

from monmodule import *

... suivit de tes tests ...

Ainsi lors de la première utilisation dans l'interpréteur tu fais:
import test_monmodule
... affichage du résultat de tes tests ...




tu modifies alors test_monmodule.py et/ou monmodule.py et dans
l'interpréteur tu fais:
reload(test_monmodule)
... affichage du résultat de tes tests ...




Et voilà !

Je te conseille aussi d'utiliser les tests unitaires avec le module
'unittest' (doc sur http://docs.python.org/lib/module-unittest.html).

Fabrice