2017-07-25 3 views
1

Je débogue (dans PyCharm) un script. Je me arrête à un point d'arrêt, puis je vais à la fenêtre de la console de débogage et à partir de là, j'invoque une ligne d'importation, comme ceci:Python: "de-import", "ré-import", "reset import"?

import my_util1 from my_utils 

J'appelle my_util1. Jusqu'à présent, tout va bien. Ensuite, je change quelque chose dans "my_util1". Maintenant, je voudrais appeler le (mis à jour) my_util1 mais je ne peux pas: le système (Python? Pycharm?) "Voit" seulement la version précédente de my_util1.

Y a-t-il une possibilité de "réinitialiser" (rafraîchir) ce que j'ai importé précédemment, ou de "réimporter", autre que de quitter PyCharm et de redémarrer le projet?

Il ne s'agit pas de changer dynamiquement le code réel en cours de débogage. La tâche que je cherche est plus simple - il suffit simplement d'annuler une opération 'import', ou de réinitialiser/effacer/rafraîchir toutes les 'imports' à la fois. En outre, l'action peut être effectuée dans la fenêtre du débogueur, pas dans la fenêtre de code.

+0

Êtes-vous redémarrer votre débogueur lorsque vous introduisez votre nouveau code? – idjaw

+0

Non, je ne le fais pas. J'ai pensé, peut-être qu'il y a un moyen de "ré-inclure" une fonction, comme je l'ai inclus. J'imagine que c'est faisable. Ai-je tort? –

+0

Copie possible de [Y at-il "Modifier et continuer" dans PyCharm? Recharger le code dans le programme en cours comme dans Eclipse/PyDev?] (Https://stackoverflow.com/questions/23333815/is-there-edit-and-continue-in-pycharm-reload-code-into-running-program-like -i) – idjaw

Répondre

1

sys.modules peut être manipulé pour changer les idées de Python sur ce qui est actuellement importé. Pour citer les documents Python:

Ceci est un dictionnaire qui mappe les noms de modules sur des modules qui ont déjà été chargés. Cela peut être manipulé pour forcer le rechargement des modules et autres astuces. Cependant, le remplacement du dictionnaire ne fonctionnera pas nécessairement comme prévu et la suppression des éléments essentiels du dictionnaire peut entraîner l'échec de Python.

Exemple d'utilisation:

import sys 
import my_util1 from my_utils 

# Now sys.modules['my_utils'] exists and my_util1 is a local name. 

del sys.modules['my_utils'] 

# my_util1 still exists as a local name, but Python has "forgotten" the import. 

import my_util1 from my_utils 
# This re-imports my_utils and binds the new my_util1. 
+0

Merci beaucoup! ça a marché. –