Python 小技巧 - Polyglot/Jupyter Notebook 引用 .py 修改後不會自動更新
| | 0 | |
下這張圖說明我使用 Polyglot Notebook/Jupyter Notebook 時的一個小困擾。
在 Polyglot/Jupyter Notebook Cell 中我們可以使用 from util import XXX 引用寫在 util.py 裡的函式。例如,我在 util.py 寫了一個 say_hello() 函式,在 main.ipynb 可使用 from util import say_hello
或 import util
util.say_hello()
呼叫它。
from util import say_hello
say_hello()
但是在我們修改 util.py 後,Jupyter Notebook 不會自動更新,故會發生擷圖的狀況,在 util.py 裡已改成 Ver 2.0 了,呼叫時還是顯示舊版的 1.0。
我以前用的笨方法是重新啟動 Kernel,一切重來,自然會改載入新版程式庫,代價是先前執行的內容、儲存的變數、物件全部都被清空,程式必須全部重跑,失去使用 Notebook 最大的優勢。
但我還是鄉愿了一陣子,反正都是小實驗,重跑就重跑,也不過幾秒鐘的事。直到最近遇上模型跑一次要十來分鐘,老人的時間尤其珍貴,經不起這種笨方法消耗,逼得我認真找解。
答案出奇簡單,Python 有個 importlib 程式庫,提供 importlib.reload() 方法,可以強迫重新載入修改後的模組,所以程式只需稍微改一下:
import importlib
import util
importlib.reload(util)
from util import say_hello
say_hello()
或是
import importlib
import util
importlib.reload(util)
util.say_hello()
如此,每次執行都會重新載入最新版本囉~
When using Polyglot/Jupyter Notebook, modified modules don’t auto-update. Tips of using importlib.reload() to reload the module and ensure the latest version is used without restarting the kernel.
Comments
Be the first to post a comment