我写了一个自己的模块,其结构如下:
为了测试我的模块,我使用IPython和/或jupyter笔记本(以前的Ipython笔记本)。像往常一样,我进行模块导入,如下所示:
假设我在
使用我的两个片段,我这样导入
然而,即使激活了
mymodule/
├── __init__.py
├── part1.py
├── part2.py
├── part3.py
└── part4.py
为了测试我的模块,我使用IPython和/或jupyter笔记本(以前的Ipython笔记本)。像往常一样,我进行模块导入,如下所示:
import mymodule
假设我在
part2.py
中编辑了一些代码,想要使用更新后的模块版本。起初我认为只需通过import mymodule
重新导入模块即可完成任务,但事实并非如此。要完全重新加载模块,我必须关闭IPython的shell或重新启动jupyter的内核,并通过import mymodule
再次开始。
然而,根据文档,IPython提供了一个自动更新功能叫做autoreload
,它提供了不同的模式,并可以通过以下方式激活:%load_ext autoreload
%autoreload 1
%aimport mymodule
使用我的两个片段,我这样导入
mymodule
:%load_ext autoreload
%autoreload 1
%aimport mymodule
import mymodule
# let's do something with the module here
然而,即使激活了
autoreload 1
或autoreload 2
,IPython和jupyter也没有按照我的期望执行,我仍然需要退出IPython的shell或重新启动jupyter的内核才能使用mymodule
中的part2.py
编辑后的代码。我做错了什么?似乎我没有理解这应该如何工作。
%autoreload 2
(实际上我将其添加到ipython_config.py
中),它适用于大多数情况。只有多重继承会有问题。 - dashesy