【发布时间】:2018-09-07 13:25:16
【问题描述】:
我正在 Jupyter 笔记本中编写一些代码,但由于某种原因,它无法识别我何时对笔记本导入的模块进行了更改。
我的 Jupyter 笔记本顶部有以下单元格:
%load_ext autoreload
%autoreload 2
基于this,我的理解是,此单元格将在笔记本中执行任何代码时强制模块重新加载。这意味着如果我编辑其中一个导入的模块,则下次运行代码时应该会反映该编辑。 即使没有这个单元,我也应该能够重新启动模块并从头开始运行每个单元以达到相同的效果。不幸的是,这种情况并非如此。无论我杀死/重新启动模块多少次,甚至完全关闭 Jupyter 笔记本,笔记本都不会识别我对相关模块所做的更改。
我在虚拟环境中工作,到目前为止,我发现的唯一解决方案是运行一个完全重建环境的脚本(包括重新下载包等)。这是一种痛苦,而且浪费的时间比应有的要大得多。
这种行为相对较新。我已经在这个环境中使用 Jupyter 笔记本几个月了,没有出现这样的问题,但我无法确定我可能改变了什么来导致这种新行为。
任何见解将不胜感激。
编辑 - 让我快速说明这样一个问题:
比如说,在一个名为 foo.py 的模块中,我有一个类:
class Foo(object):
foo_bool = True
在我的笔记本中,我有单元格:
from foo import Foo
然后我添加到foo.py:
class Foo(object):
foo_bool = True
class Bar(object):
bar_bool = False
我现在想导入这两个类,所以我将笔记本单元格更改为:
from foo import Foo, Bar
我没有正确导入这两个类,而是得到如下内容:
---------------------------------------------------------------------------
ImportError Traceback (most recent call last)
<ipython-input-2-1d0ce6099263> in <module>()
1 import some_module
2 import some_other_module
----> 3 from foo import Foo, Bar
4 from yet_another_module import Thing
5 from the_last_module import TheLastThing
ImportError: cannot import name Bar
再次感谢您的帮助!
【问题讨论】:
-
你最终解决了这个问题吗?我现在也在苦苦挣扎..