2010-11-06 4 views
48

Ho un foo.pycome "reimportare" modulo python quindi il codice essere cambiato dopo l'importazione

def foo(): 
    print "test" 

In IPython io uso:

In [6]: import foo 
In [7]: foo.foo() 
test 

Poi ho cambiato il foo() a:

def foo(): 
    print "test changed" 

In IPython, il risultato per il richiamo è ancora test:

In [10]: import foo 
In [11]: foo.foo() 
test 

allora io uso:

In [15]: del foo 
In [16]: import foo 
In [17]: foo.foo() 
test 

possibile eliminare la foo.pyc nella stessa cartella foo.py esiste, ma ancora senza fortuna.

Posso sapere come reimportare il codice aggiornato in runtime?

+2

Eventuali duplicati di [Reimportare un modulo in pitone mentre interattivo] (http://stackoverflow.com/questions/1254370/reimport-a- module-in-python-while-interactive) – Praveen

risposta

62
foo = reload(foo) 
+22

In realtà, solo "reload (foo)" - non c'è bisogno di re-attribuirlo – jsbueno

+0

grazie, funziona nella shell ipython – user478514

+2

Non riuscivo a farlo funzionare. Sto recuperando l'errore TypeError: reload() deve essere il modulo – Burak

55

Oltre alla risposta di gnibbler:

situazione è cambiata in Python 3:

>>> import imp 
>>> imp.reload(foo) 

Come @onnodb sottolinea, imp è deprecato in favore di importlib dal Python 3.4:

>>> import importlib 
>>> importlib.reload(foo) 
+4

Solo una piccola nota: nelle versioni successive di Python 3.x, "imp" è deprecato a favore di "importlib". Funziona allo stesso modo, però. – onnodb

4

Se si desidera che ciò avvenga automaticamente, c'è il Modulo autoreload fornito con iPython.

15

La funzionalità di IPython3 autoreload funziona correttamente.

Sto utilizzando l'esempio effettivo dalla pagina web. Prima carica la funzione "autoreload".

In []: %load_ext autoreload 
In []: %autoreload 2 

Quindi importare il modulo che si desidera verificare:

In []: import foo 
In []: foo.some_function() 
Out[]: 42 

Aprire foo.py in un editor e cambiare una_qualche_funzione per tornare 43

In []: foo.some_function() 
Out[]: 43 

Funziona anche se si importa il funzione direttamente.

In []: from foo import some_function 
In []: some_function() 
Out[]: 42 

cambiamento apportate in una_qualche_funzione per tornare 43.

In []: some_function() 
Out[]: 43 
Problemi correlati