2013-01-24 11 views
6

Vorrei poter aprire una shell Python, eseguire del codice definito in un modulo, quindi modificare il modulo, poi ri-eseguirlo nello stesso guscio senza chiusura/riapertura.codice Esegui da un modulo Python, modificare modulo, quindi eseguire nuovamente senza uscire interpeter

Ho provato reimportare le funzioni/oggetti dopo aver modificato lo script, e che non funziona:

Python 2.7.2 (default, Jun 20 2012, 16:23:33) 
[GCC 4.2.1 Compatible Apple Clang 4.0 (tags/Apple/clang-418.0.60)] on darwin 
Type "help", "copyright", "credits" or "license" for more information. 
>>> from my_module import buggy_function, test_input 
>>> buggy_function(test_input) 
wrong_value # Returns incorrect result 

# Go to the editor, make some changes to the code and save them 

# Thought reimporting might get the new version 
>>> from my_module import buggy_function, test_input 

>>> buggy_function(test_input) 
wrong_value # Returns the same incorrect result 

Chiaramente reimportazione non mi ha ottenuto la 'nuova versione' della funzione.

In questo caso, non è un grosso problema per chiudere l'interprete e riaprirlo. Ma, se il codice che sto testando è abbastanza complicato, a volte devo fare una buona quantità di oggetti di importazione e definire variabili dummy per creare un contesto che possa testare adeguatamente il codice. Diventa fastidioso doverlo fare ogni volta che apporto una modifica.

Qualcuno sa come "refresh" il codice del modulo all'interno del interpeter Python?

+1

È sempre possibile scrivere un modulo che importa tutto, definisce variabili dummy, ecc, e poi ogni volta che si riapre l'interprete, basta 'da testsetup import *' per ottenere il giusto contesto (o esegui 'python -i test setup.py' invece di solo' python'). – abarnert

risposta

9

uso imp.reload():

In [1]: import imp 

In [2]: print imp.reload.__doc__ 
reload(module) -> module 

Reload the module. The module must have been successfully imported before. 
+0

reload() è disponibile anche nel namespace globale senza la necessità di importare imp. –

+0

@LieRyan solo in py2x. –

Problemi correlati