【问题标题】:Completely disable IPython output caching完全禁用 IPython 输出缓存
【发布时间】:2014-01-15 21:12:12
【问题描述】:

我在 IPython 中处理一些 GB 大小的 numpy 数组。当我删除它们时,我绝对希望它们消失,以恢复记忆。 IPython 的输出缓存在那里非常烦人,因为即使在删除了对它们的最后一个主动 引用之后,它仍然保持对象的活动状态。我已经设置了

c.TerminalInteractiveShell.cache_size = 0

在 IPython 配置中,但这只会禁用缓存到 _oh 的条目,其他变量如 ___ 等仍会创建。我也知道%xdel,但无论如何,我宁愿完全禁用它,因为我很少使用输出历史记录,所以一个普通的del 会立即再次工作。

【问题讨论】:

  • 只有当你显示它们时,那​​些大数组才会被分配给缓存(_ 等),不是吗?赋值 x=largearraylargearray; 抑制它。
  • 是的,但是为了显示它们,我总是不得不使用 print 而不是仅仅输入变量名。所以我仍然回到同一个问题,如何避免这种情况。
  • 通常只显示形状或大数组的一部分(例如前 10 行或列)比显示整个内容更有用。在显示大型数组时不使用省略号的旧 MATLAB 上尤其如此。

标签: caching output ipython history


【解决方案1】:

查看IPython/core/displayhook.py 209-214 行,我会说它是不可配置的。你可以尝试做一个 PR 来添加一个完全禁用它的选项。

【讨论】:

  • 这实际上给了我正确的想法!仔细查看代码,它会检查 _ 是否存在于 - 取决于版本 - __builtin__IPython.core.py3compat.builtin_mod。所以在__builtin__._ = True 之后,历史就没有了!谢谢!
  • 哦,我想你把它放在你的启动文件夹中,然后,它是确定的 :-)
  • @Michael 您是否愿意将您的评论更改为答案,或者添加一些关于您所做的事情的细节?我想做和你一样的事情,但我宁愿不修补它并使用(和 upvode)罐装解决方案。
  • @jb 我在下面添加了一个答案。
  • 答案在 Jupyter 下不再起作用。甚至 c.TerminalInteractiveShell.cache_size = 0 都不起作用。如何禁用 Out 和 _? @马特
【解决方案2】:

输入

echo "__builtin__._ = True" > ~/.config/ipython/profile_default/startup/00-disable-history.py

你的历史应该消失了。

编辑:

似乎配置目录的路径有时有点不同,~/.config/ipython 或只是~/.ipython/。所以只需检查你得到的是哪一个并相应地调整路径。该解决方案仍然适用于jupyter console

【讨论】:

  • 每次启动 iPython 时都会禁用历史记录吗?
【解决方案3】:

似乎我们可以通过放置一个“;”来抑制输出缓存现在在行尾。

http://ipython.org/ipython-doc/stable/interactive/tips.html#suppress-output

【讨论】:

    【解决方案4】:

    创建 ipython 配置文件:

    !ipython profile create
    

    输出可能是(对于 ipython v4.0):

    [ProfileCreate] Generating default config file: '/root/.ipython/profile_default/ipython_config.py'
    [ProfileCreate] Generating default config file: '/root/.ipython/profile_default/ipython_kernel_config.py'
    

    然后将'c.InteractiveShell.cache_size = 0'这一行添加到ipython_kernel_config.py文件中

    !echo 'c.InteractiveShell.cache_size = 0' >> /root/.ipython/profile_default/ipython_kernel_config.py
    

    加载另一个 ipython 内核并检查它是否工作

    In [1]: 123
    Out[1]: 123
    
    In [2]: _1
    ---------------------------------------------------------------------------
    NameError                                 Traceback (most recent call last)
    <ipython-input-51-21553803e553> in <module>()
    ----> 1 _1
    
    NameError: name '_1' is not defined
    
    In [3]: len(Out)
    Out[3]: 0
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-02-09
      • 2014-06-24
      相关资源
      最近更新 更多