2013-01-24 21 views
6

Chciałbym móc otworzyć powłokę Pythona, wykonać kod zdefiniowany w module, następnie zmodyfikować moduł, a następnie ponownie go uruchomić. w tej samej powłoce bez zamykania/ponownego otwierania.Uruchom kod z modułu Pythona, zmodyfikuj moduł, a następnie uruchom ponownie bez wychodzenia z interpolatora.

Próbowałem ponownego importowania funkcji/obiektów po zmianie skryptu, i że nie działa:

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 

Wyraźnie ponownego importowania nie dostać mi nową wersję „” funkcji.

W tym przypadku nie jest tak wielkim problemem, aby zamknąć tłumacza i otworzyć go ponownie. Ale jeśli testowany przeze mnie kod jest wystarczająco skomplikowany, czasami muszę wykonać sporą liczbę importowanych obiektów i zdefiniować fałszywe zmienne, aby utworzyć kontekst, który może odpowiednio przetestować kod. Denerwujące jest to, że muszę to robić za każdym razem, gdy dokonuję zmiany.

Ktoś wie, jak "odświeżyć" kod modułu w interpreterze Python?

+1

Zawsze można napisać moduł, który importuje wszystko, definiuje zmienne fikcyjne, itp, a następnie za każdym razem ponownym otwarciu tłumacza, po prostu 'od importu testsetup *', aby uzyskać prawy kontekst (lub 'python -i testuj setup.py' zamiast tylko' python'). – abarnert

Odpowiedz

9

użycie 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

Funkcja reload() jest również dostępna w globalnym obszarze nazw bez potrzeby importowania imp. –

+0

@LieRyan tylko w py2x. –

Powiązane problemy