假設main.py我有
from tools import myconstant
和tools.py我有:
myconstant = 15
現在我添加一些東西tools.py:
myconstant = 15
myotherconstant = 25
保存檔案并在main.py我運行(仍然來自同一個 python 會話):
from tools import myotherconstant
這會引發錯誤。如果我重新啟動我的 python 會話,它就可以作業。這是為什么?我知道通常情況下,人們會從一個新的會話中運行主檔案并且永遠不會遇到這個“問題”,但我仍然很好奇為什么 python 無法檢測到檔案中的更改。如果我更改 CSV 檔案的內容并再次讀取它,它將反映更新后的資料。這里有什么區別?
這里沒有問題要解決,我只是要求澄清 python 概念:) 一些演示內部作業原理的最小示例將不勝感激。
uj5u.com熱心網友回復:
模塊只在加載時檢查,這是一件好事,您可以使用 reload()
import importlib
importlib.reload(tools.py)
uj5u.com熱心網友回復:
不需要特別重啟,你只需要重新加載模塊
Python 將快取匯入的模塊
從檔案
在匯入搜索期間檢查的第一個位置是
sys.modules。此映射用作之前匯入的所有模塊的快取,包括中間路徑。
您可以通過從中洗掉字典鍵sys.modules并再次匯入來從快取中洗掉模塊。雖然,這不是推薦的方法(因為其他模塊可能會參考它)。
您應該使用importlib.reload
來自檔案
重新加載以前匯入的模塊。引數必須是一個模塊物件,所以它必須之前已經成功匯入。如果您使用外部編輯器編輯了模塊源檔案并希望在不離開 Python 解釋器的情況下試用新版本,這將非常有用。
例子,
import xyz # reload this
import importlib
importlib.reload(xyz)
或者
from xyz import pqr
import importlib
import sys
importlib.reload(sys.modules.get('xyz')
在你的例子中,你需要做
import importlib
import sys
importlib.reload(sys.modules.get('tools'))
重新啟動也會清除快取,但這不是必需的。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/394632.html
標籤:Python
