2010-08-22 7 views
1

Je travaille depuis l'intérieur d'un shell ipython et j'ai souvent besoin de recharger les fichiers de script qui contiennent mes fonctions-en-construction.Python shell et execfile scope

intérieur de mon main.py je:

def myreload(): execfile ("main.py") execfile ("otherfile.py")

Appel myreload() fonctionne très bien si J'ai déjà couru dans la même session ipython les commandes execfile directement.

Cependant, pour une raison quelconque, si la session est récente et que je viens d'appeler execfile ("main.py"), alors myreload() ne rend pas les fonctions disponibles depuis otherfile.py disponibles. Il ne jette cependant aucune erreur.

Des idées?

Répondre

2

Les fonctions créent une nouvelle étendue. execfile() exécute le script dans la portée actuelle. Ce que vous faites ne fonctionnera pas.

1

Si vous cherchez à apprendre l'utilisation correcte réelle de ipython (par exemple en mode interactif), vous devez utiliser les commandes magiques comme:

%run 

et

%edit 

Vérifier l'aide pour ces fonctions avec %run?. Cela fournit des exemples explicites.

Voir aussi http://ipython.org/ipython-doc/stable/interactive/tutorial.html

+0

Vérifiez également comment recharger module python http://stackoverflow.com/questions/437589/how-do-i-unload-reload-a-python-module?rq=1 –