Restart again and again – – SO ANNOYING!
在使用 jupyter notebook 编程中常常会遇到这样的问题,我们在一个笔记本比如 example.ipynb
中 import
了一个外部的自定义模块 mymodule.py
,运行后发现 mymodule.py
里有函数写错了,在修改完 mymodule.py
中的错误后回到 example.ipynb
继续运行,发现修改并没有同步到 example.ipynb
中,还是会报相同的错。
最简单粗暴地解决这个问题的方法是 重启内核,让 example.ipynb
重新 import
一下 mymodule.py
,会发现导入的就是修改后的模块了。
但如果我们要频繁修改 mymodule.py
文件,难道要不停地重启再重启吗?那也太烦人了!
Alternative method 1: importlib.reload
第一个方法是使用 importlib
中的 reload
函数,显式地指明 notebook 在导入时注意 reload
一下,即可同步修改。举例如下:
import mymodule
import importlib
importlib.reload(mymodule)
这样在每次修改完后运行 import
cell,都会同步修改内容。
然而,如果我们想要同步很多 module呢?一个一个地指明 reload 也有点繁琐,那就可以用第二种方法。
Alternative method 2: autoreload
用法如下:
首先启用 autoreload
拓展:
%load_ext autoreload
接着设置 autoreload
模式为自动重新加载所有模块:
%autoreload 2
如果要自动重新加载 mymodule
,可以写作:
%load_ext autoreload
%autoreload 2
import mymodule
Summary
除了重启内核来更新模块修改之外,还可以使用 importlib.reload
和 aotureload
的方法进行更新,还有什么其他方法的话感谢在评论区指出!