j'ai un foo.py
def foo():
print "test"
Dans IPython, j'utilise:
In [6]: import foo
In [7]: foo.foo()
test
Ensuite, j'ai changé le foo()
en:
def foo():
print "test changed"
Dans IPython, le résultat de l'appel est toujours test
:
In [10]: import foo
In [11]: foo.foo()
test
Ensuite, j'utilise:
In [15]: del foo
In [16]: import foo
In [17]: foo.foo()
test
Je supprime le foo.pyc
dans le même dossier foo.py
existe, mais toujours pas de chance.
Puis-je savoir comment réimporter le code mis à jour au moment de l'exécution?
python
runtime
ipython
overloading
python-import
user478514
la source
la source
Réponses:
Pour Python 2.x
Pour Python 3.x
import importlib import foo #import the module here, so that it can be reloaded. importlib.reload(foo)
la source
reload
un module?. par exemple. Vous devriez le faire à l'import foo
avancefrom foo import *
oufrom foo import bar
, le symbolefoo
n'est pas défini. Vous devezimport sys
alorsreload(sys.modules['foo'])
ou peutreload(sys.modules[bar.__module__])
En plus de la réponse de gnibbler:
Cela a changé dans Python 3 en:
>>> import imp >>> imp.reload(foo)
Comme le souligne @onnodb,
imp
est obsolète au profit deimportlib
depuis Python 3.4:>>> import importlib >>> importlib.reload(foo)
la source
La fonction de chargement automatique d' IPython3 fonctionne parfaitement.
J'utilise l'exemple réel de la page Web. Commencez par charger la fonction 'autoreload'.
In []: %load_ext autoreload In []: %autoreload 2
Importez ensuite le module que vous souhaitez tester:
In []: import foo In []: foo.some_function() Out[]: 42
Ouvrez foo.py dans un éditeur et modifiez some_function pour renvoyer 43
In []: foo.some_function() Out[]: 43
Cela fonctionne également si vous importez directement la fonction.
In []: from foo import some_function In []: some_function() Out[]: 42
Modifiez une fonction pour renvoyer 43.
In []: some_function() Out[]: 43
la source
Si vous voulez que cela se produise automatiquement, il existe le module de chargement automatique fourni avec iPython.
la source