2013-01-24 16 views
6

'dan çıkmadan tekrar çalıştırın Bir Python kabuğunu açmak, bir modülde tanımlanmış bir kodu yürütmek, sonra modülü değiştirmek ve daha sonra yeniden çalıştırmak istiyorum aynı kabukta kapanmadan/açmadan.Bir Python modülünden kodu çalıştırın, modülü değiştirin ve ardından

Senaryoyu değiştirdikten sonra işlevleri/nesneleri reimporting denedim ve bu işe yaramazsa:

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 

Açıkça bana fonksiyonun 'yeni sürümü' alamadım reimporting.

Bu durumda, tercümanı kapatmak ve tekrar açmak büyük bir anlaşma değildir. Ancak, test ettiğim kod yeterince karmaşıksa, bazen kodu doğru bir şekilde test edebilecek bir içerik oluşturmak için adil miktarda nesne ithal etmek ve kukla değişkenleri tanımlamak zorundayım. Her değişiklik yaptığımda bunu yapmak zorunda kalmak sinir bozucu oluyor.

Python yorumlayıcı içindeki modül kodunu nasıl "yenileyeceğinizi" bilen var mı?

+1

vb kukla değişkenler, tanımlar ve ardından her zaman tercüman yeniden, sadece 'testsetup ithalat * dan' almak doğru bağlamda (veya sadece python yerine python -i test setup.py) yapılır. – abarnert

cevap

9

kullanım imp.reload(): Her zaman her şeyi ithal eden bir modül, yazabilir

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(), içe aktarma gereği olmadan global ad alanında da kullanılabilir. –

+0

@ LieRyan sadece py2x içinde. –

İlgili konular