Python如何重新加載模塊
問題
你想重新加載已經加載的模塊,因為你對其源碼進行了修改。
解決方案
使用imp.reload()來重新加載先前加載的模塊。舉個例子:
>>> import spam>>> import imp>>> imp.reload(spam)<module ’spam’ from ’./spam.py’>>>>
討論
重新加載模塊在開發和調試過程中常常很有用。但在生產環境中的代碼使用會不安全,因為它并不總是像您期望的那樣工作。
reload()擦除了模塊底層字典的內容,并通過重新執行模塊的源代碼來刷新它。模塊對象本身的身份保持不變。因此,該操作在程序中所有已經被導入了的地方更新了模塊。
盡管如此,reload()沒有更新像”from module import name”這樣使用import語句導入的定義。舉個例子:
# spam.pydef bar(): print(’bar’)def grok(): print(’grok’)
現在啟動交互式會話:
>>> import spam>>> from spam import grok>>> spam.bar()bar>>> grok()grok>>>
不退出Python修改spam.py的源碼,將grok()函數改成這樣:
def grok(): print(’New grok’)
現在回到交互式會話,重新加載模塊,嘗試下這個實驗:
>>> import imp>>> imp.reload(spam)<module ’spam’ from ’./spam.py’>>>> spam.bar()bar>>> grok() # Notice old outputgrok>>> spam.grok() # Notice new outputNew grok>>>
在這個例子中,你看到有2個版本的grok()函數被加載。通常來說,這不是你想要的,而是令人頭疼的事。
因此,在生產環境中可能需要避免重新加載模塊。在交互環境下調試,解釋程序并試圖弄懂它。
以上就是Python如何重新加載模塊的詳細內容,更多關于Python重寫加載模塊的資料請關注好吧啦網其它相關文章!
相關文章: