IPython / Jupyter Notebook中的自动更新模块

6
我写了一个自己的模块,其结构如下:
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 1autoreload 2,IPython和jupyter也没有按照我的期望执行,我仍然需要退出IPython的shell或重新启动jupyter的内核才能使用mymodule中的part2.py编辑后的代码。我做错了什么?似乎我没有理解这应该如何工作。

3
听起来像是一个bug,我使用%autoreload 2(实际上我将其添加到ipython_config.py中),它适用于大多数情况。只有多重继承会有问题。 - dashesy
1个回答

5

根据dashesy的建议,将%autoreload 1更改为%autoreload 2,这可以解决旧版本或错误问题。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接