自动重载如何与 jupyter 配合使用?

问题描述 投票:0回答:1

我的工作目录中有一个文件

mytest.py
,内容如下:

class MyTest(object):

  def __init__(self):
    print(1)
    pass

jupyter
我有这些细胞。

细胞 1:

%reload_ext autoreload
%autoreload 2
import mytest

细胞 2:

x = mytest.MyTest()

如果我从一个新鲜的内核开始,那么它会按预期工作,并且它给了我

1
。现在,如果我进入
mytest.py
并将打印输出更改为 2 并重新运行 Cell 2,我会得到:

1
[autoreload of mytest failed: Traceback (most recent call last):
  File "/Users/myusername/anaconda/lib/python3.5/site-packages/IPython/extensions/autoreload.py", line 247, in check
    superreload(m, reload, self.old_objects)
NameError: name 'reload' is not defined
]
[autoreload of mytest failed: Traceback (most recent call last):
  File "/Users/myusername/anaconda/lib/python3.5/site-packages/IPython/extensions/autoreload.py", line 247, in check
    superreload(m, reload, self.old_objects)
NameError: name 'reload' is not defined
]

如果我现在再次运行 Cell 2,我会得到

1
,没有任何错误,但它仍然没有使用新代码。

我不知道如何在不重新启动内核的情况下正确地重新加载模块,这是我做不到的,因为我在实际程序中有一些非常耗时的代码。

我已经在终端的

IPython
中尝试过这个。虽然修改代码后实例化类也会给我带来错误(请注意,这是一个不同的错误:
AttributeError: 'NoneType' object has no attribute '__dict__'
),但如果我再次运行它,它将使用更新的代码。所以在我看来,这是一个特定于
jupyter
的问题。

我应该怎么做才能解决这个问题?

编辑(添加版本信息): 蟒蛇2.5.0 Python 3.5.0 IPython 4.1.2 朱皮特4.1.0 Mac OS X 10.11.2

python ipython python-module jupyter jupyter-notebook
1个回答
0
投票

我正在使用最新版本的Jupyter(笔记本v7.0.4,ipython v8.15.0),我可以说现在

autoreload
工作得很好(无法重现问题中提到的错误)。事实上,在更改
mytest.py
的内容后,如果我重新运行单元格 2,则不会出现任何错误,并且可以看到更新后的输出。

© www.soinside.com 2019 - 2024. All rights reserved.