440 votes

Comment réimporter un paquet mis à jour dans l'interpréteur Python ?

Je teste souvent mon module dans l'interpréteur Python, et quand je vois une erreur, je mets rapidement à jour le fichier .py. Mais comment faire pour que cela se reflète dans l'interpréteur ? Jusqu'à présent, j'ai quitté et réintégré l'interpréteur parce que la réimportation du fichier ne fonctionne pas pour moi.

2 votes

Il semble que cette question ait été posée/répondue avant la sortie de reimport. Voir ma réponse ci-dessous pour de nouvelles informations.

3 votes

Les importations en Python sont mises en cache, donc normalement la deuxième importation et les suivantes obtiennent le même code même si le fichier a changé.

10voto

kkurian Points 898

Réponse courte :

essayez d'utiliser reimport : un rechargement complet pour Python .

Réponse plus longue :

Il semble que cette question ait été posée/répondue avant la sortie de l'application réimportation qui se présente comme une "recharge complète pour Python" :

Ce module a l'intention d'être un remplacement complet de la fonction de rechargement de Python. Il vise à réaliser un rechargement qui fonctionne pour les plugins et les extensions Python utilisés par les applications qui fonctionnent depuis longtemps.

Reimport supporte actuellement Python 2.4 à 2.6.

De par sa nature même, ce problème n'est pas entièrement soluble. L'objectif de ce module est d'assurer le bon fonctionnement des mises à jour les plus courantes. Il permet également aux modules individuels et aux paquets d'aider au processus. Une description plus détaillée de ce qui se passe se trouve sur la page de présentation.

Remarque : Bien que le reimport supporte explicitement Python 2.4 à 2.6, je l'ai essayé sur 2.7 et il semble fonctionner parfaitement.

1 votes

Excellente découverte. Il semble que cela fonctionne bien pour les cas simples dans l'interpréteur lorsque vous faites un petit changement de code, et c'est tout ce que je voulais vraiment...

5voto

dragonfly Points 1285

Pas sûr que cela fasse toutes les choses attendues, mais vous pouvez faire comme ça :

>>> del mymodule
>>> import mymodule

3voto

Joe W. Points 849

Voir ici pour une bonne explication de la façon dont vos modules dépendants ne seront pas rechargés et des effets que cela peut avoir :

http://pyunit.sourceforge.net/notes/reloading.html

La façon dont pyunit a résolu le problème était de suivre les modules dépendants en surchargeant __import__ puis de supprimer chacun d'entre eux de sys.modules et de les réimporter. Ils auraient probablement pu simplement les recharger, cependant.

0 votes

En distillant un peu - pour moi, le simple fait de taper "reload(<nom_du_module>)" fonctionne entre les tests. La simple utilisation de "del module ; import module" ne fonctionne pas.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X