【问题标题】:ipython notebook is not updating when I change my code当我更改我的代码时,ipython notebook 没有更新
【发布时间】:2016-01-13 03:54:50
【问题描述】:

所以,我在使用 ipython 笔记本时遇到了一个奇怪的问题,不知道该怎么办。通常,当我运行一部分代码时,如果出现错误,我会追溯它,修复它,然后重新运行代码。我正在做类似的事情,但即使在对代码进行了更改之后,看起来也没有任何变化!

这里是示例...我使用的是 Python 3.5,所以 xrange 消失了。这会导致抛出错误:

XXXX
     24     XXXX
     25     XXXX
---> 26     for t in xrange(0,len(data),1):
     27 
     28         XXXX

     NameError: name 'xrange' is not defined

但在更改我的代码后(您可以在第 26 行的差异下方看到),弹出相同的错误!

XXXX
     24     XXXX
     25     XXXX
---> 26     for t in range(0,len(data),1):
     27 
     28     XXX

     NameError: name 'xrange' is not defined

关于为什么会发生这种情况的任何想法?

【问题讨论】:

  • 你能分享一个minimal reproducible example吗?从您的错误描述中很难猜出发生了什么。
  • 我猜您正在更改已导入的外部文件。导入的文件不会自动重新加载。您可以使用importlib.reload(mymodule) 显式重新加载它。这尤其吸引了习惯于使用 Matlab 的人,因此 IPython 有一个 autoreload extension,它会在导入的模块发生更改时尝试自动重新加载。
  • 啊!谢谢@ThomasK,这最终奏效了! :) 只是更新导入文件的问题。谢谢!
  • 我也有同样的问题!

标签: ipython ipython-notebook jupyter jupyter-notebook


【解决方案1】:

正如Thomas K 所说,您可能正在对未导入的外部文件进行更改。对于这种情况,ipython notebook 中有一个非常有用的命令,称为 autoreaload。使用 autoreaload,每当您修改外部文件时,您都不必再次导入它,因为扩展会为您处理它。更多信息请查看:ipython autoreload

【讨论】:

    【解决方案2】:

    只要使用外部文件和 Ipython 一起使用自动重载。每次在 IPython 中执行任何代码之前,它都会重新加载外部文件。

    在 IPython 的第一个单元格中添加这个。

    %load_ext autoreload
    %autoreload 2
    

    【讨论】:

      【解决方案3】:

      对我来说,这是由于以下原因之一

      • 原因 1:导入的模块未更新

      解决方案:

      import importlib
      importlib.reload(your_module)
      
      • 原因2:其他

      解决方案:重启内核,对于jupyter notebook是这样的

      【讨论】:

      • %autoreload 方法对我不起作用,但使用 importlib 可以。谢谢!
      【解决方案4】:

      我有时也会遇到同样的问题。我认为这与内存有关 - 如果我有一堆数据框挂在它周围,它似乎会导致问题。如果我使用 Kernel > Restart 选项重新启动内核,问题就会消失。

      【讨论】:

      • 如果是内存问题,你也可以做%reset,或者垃圾回收。
      【解决方案5】:

      我有时也会遇到同样的问题。我重新启动了内核,但它不起作用。我尝试运行单元(ctr+ enter)两到三遍。然后将根据更新的代码显示结果。希望对你有帮助。

      【讨论】:

        【解决方案6】:

        使用 + 选项插入新的空单元格,转到内核,选择重新启动并运行所有。 然后,填写新插入的单元格并在 Kernel 中再次运行,选择 Restart & Run All。

        它对我有用。

        【讨论】:

          【解决方案7】:

          我也有同样的问题。我尝试了 jupyter magic autoreload 但它没有用。最后,我以这种方式解决了它: 在第一个单元格中,添加

          import My_Functions as my
          import importlib
          importlib.reload(my)
          

          但是注意如果模块是这样导入的:

          from My_Functions import *
          

          我无法正确重新加载它。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2014-05-01
            • 1970-01-01
            • 2021-09-05
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多