2010-11-02 5 views
5

Débutants question. J'ai démarré mon shell ipython et j'exécute des scripts avec la commande run et tout fonctionne très bien. Cependant, l'exécution d'un fichier de script, puis la modification d'un fichier de script importé, puis la tentative d'exécution à nouveau entraîne l'exécution de l'ancien fichier importé. Donc, je suppose que python enregistre une sorte de cache pour la vitesse. J'ai essayé la commande claire et telle mais en vain.Comment mettre à jour une importation de script exécutée dans le shell Python après l'avoir modifiée?

Fondamentalement, mon problème est le suivant. Deux fichiers: function.py et program.py. Le fichier programme importe la fonction. Mais l'exécution du programme, puis la modification de la fonction et l'exécution du programme à nouveau entraînent l'exécution de l'ancienne fonction/version non éditée.

+0

Pourquoi n'exécutez-vous pas 'program.py' à partir de la ligne de commande? –

Répondre

8

À l'intérieur d'iPython ou de l'interpréteur Python standard, vous pouvez utiliser la fonction reload() pour recharger un module importé.

Exemple:

In [1]: import foo 
    # make some changes to the foo.py 
In [2]: reload(foo) 
+0

L'ajout d'un rechargement après la commande d'import dans le fichier script fait donc l'affaire! Serait bien avec une sorte de commande flush si. –

0

Il est indiqué here que le fichier est relu du disque à chaque fois, êtes-vous sûr que l'erreur n'est pas de votre côté?

+0

Oui ma faute. Le fichier de script que j'exécute est mis à jour mais pas le fichier de script importé dans le fichier de script que je cours. –

1

Utilisation fonction Python's reload recompiler le code du module et réexécuter l'ensemble du code au niveau du module - sinon l'interpréteur Python utilisera le bytecode compilé vicié (.pyc). Par exemple:

In [1]: import script 

In [2]: run script 
... 

In [3]: reload(script) 
Out[3]: <module 'script' from 'script.pyc'> 
... 
In [4]: run script 
Questions connexes