
使用python进行数据分析,我一般喜欢在jupyter notebook里分析数据,如果分析任务重、需要对多组数据进行分析,我就会把函数抽取出来,放进自定义模块里,便于维护和复用。但是jupyter notebook有一个问题,import自定义模块之后,不会自动更新自定义模块。
之前经常会遇到函数没写好需要更改的情况,由于修改之后,jupyter无法自动更新代码,我就只能手动重启Jupyter内核,非常麻烦,还得重跑前面代码,如果前面代码运行时间久,就非常浪费时间,一度想要放弃jupyter notebook分析数据。
后面突然发现jupyter其实有自动更新模块的魔法命令%autoreload,使用之后,就可以自动重载模块,修改模块代码后,再次运行就会使用新代码运行!
语法概览:
✦ 方案一:全部重载
# 设置自动重载
%load_ext autoreload
# 全部重载
%autoreload 2
✦ 方案2 只重载指定import的模块
# 设置自动重载
%load_ext autoreload
# 部分重载
%autoreload 1
%aimport utils.func
具体解释
autoreload的意思是自动重新装入,它后面可带参数。
✦ 无参:装入所有模块
✦ 0:不执行装入命令。
✦ 1:只装入所有%aimport 要装的模块。
选择性重新加载:只重新加载那些使用 %aimport 明确指定的模块。
用法:
%load_ext autoreload
%autoreload 1
%aimport your_module
✦ 2:装入所有%aimport不包含的模块。
全面重新加载:自动重新加载所有已导入的模块(除了一些系统模块)。
用法:
%load_ext autoreload
%autoreload 2
注意
✦ 如果导入一个模块之后,已经运行,后面进行修改之后,才添加autoreload语句,是没法自动重载的,只能重启内核,所以建议直接在jupyter的开头就添加autoreload命令
示例
创建一个示例自定义模块 mymodule.py,内容为
defgreet(name):
return'Hello, ' + name + '?'
用jupyter调用

对mymodule.py进行更改,重新运行jupyter

发现输出没有改变
添加自动重载模块的魔法命令,并重启jupyter内核,发现输出改变

现在不需要重启内核,就能实现自动重载
