1. 程式人生 > 程式設計 >Python如何重新載入模組

Python如何重新載入模組

問題

你想重新載入已經載入的模組,因為你對其原始碼進行了修改。

解決方案

使用imp.reload()來重新載入先前載入的模組。舉個例子:

>>> import spam
>>> import imp
>>> imp.reload(spam)
<module 'spam' from './spam.py'>
>>>

討論

重新載入模組在開發和除錯過程中常常很有用。但在生產環境中的程式碼使用會不安全,因為它並不總是像您期望的那樣工作。

reload()擦除了模組底層字典的內容,並通過重新執行模組的原始碼來重新整理它。模組物件本身的身份保持不變。因此,該操作在程式中所有已經被匯入了的地方更新了模組。

儘管如此,reload()沒有更新像”from module import name”這樣使用import語句匯入的定義。舉個例子:

# spam.py
def 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 output
grok
>>> spam.grok() # Notice new output
New grok
>>>

在這個例子中,你看到有2個版本的grok()函式被載入。通常來說,這不是你想要的,而是令人頭疼的事。

因此,在生產環境中可能需要避免重新載入模組。在互動環境下除錯,解釋程式並試圖弄懂它。

以上就是Python如何重新載入模組的詳細內容,更多關於Python重寫載入模組的資料請關注我們其它相關文章!