autoreload如何与jupyter一起工作?

时间:2016-03-23 09:31:02

标签: python ipython python-module jupyter jupyter-notebook

我在工作目录中有一个文件mytest.py,其中包含以下内容:

class MyTest(object):

  def __init__(self):
    print(1)
    pass

jupyter我有这些细胞。

单元格1:

%reload_ext autoreload
%autoreload 2
import mytest

Cell 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特有的问题。

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

编辑(添加版本信息): Anaconda 2.5.0 Python 3.5.0 IPython 4.1.2 jupyter 4.1.0 Mac OS X 10.11.2

0 个答案:

没有答案