Caching 完全禁用IPython输出缓存

Caching 完全禁用IPython输出缓存,caching,output,ipython,history,Caching,Output,Ipython,History,我正在处理IPython中一些GB大小的numpy阵列。当我删除它们时,我肯定希望它们消失,以便恢复内存。IPythons输出缓存在那里非常烦人,因为它甚至在删除最后一个对对象的主动引用之后仍然保持对象的活动状态。我已经准备好了 c、 TerminalInteractiveShell.cache_size=0 在IPython配置中,但这只会禁用对\u oh项的缓存,其他变量(如\u、\u等)仍会创建。我也知道%xdel,但无论如何,我宁愿完全禁用它,因为我很少使用输出历史记录,这样一个简单的d

我正在处理IPython中一些GB大小的numpy阵列。当我删除它们时,我肯定希望它们消失,以便恢复内存。IPythons输出缓存在那里非常烦人,因为它甚至在删除最后一个对对象的主动引用之后仍然保持对象的活动状态。我已经准备好了

c、 TerminalInteractiveShell.cache_size=0

在IPython配置中,但这只会禁用对
\u oh
项的缓存,其他变量(如
\u
\u
等)仍会创建。我也知道
%xdel
,但无论如何,我宁愿完全禁用它,因为我很少使用输出历史记录,这样一个简单的
del
将立即再次工作。

查看第209-214行,我会说它是不可配置的。您可以尝试创建一个PR来添加一个选项以完全禁用它。

Enter

echo "__builtin__._ = True" > ~/.config/ipython/profile_default/startup/00-disable-history.py
你的历史应该消失了

编辑:


看起来config目录的路径有时有点不同,要么是
~/.config/ipython
,要么就是
~/.ipython/
。因此,只需检查您得到的是哪一个,并相应地调整路径。该解决方案仍然适用于jupyter控制台

似乎我们现在可以通过在行的末尾添加“;”来抑制输出缓存


请参见创建ipython配置文件:

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

然后将行
“c.InteractiveShell.cache\u size=0”
添加到
ipython\u kernel\u 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
[1]中的
:123
Out[1]:123
在[2]中:
---------------------------------------------------------------------------
NameError回溯(最近一次呼叫上次)
在()
----> 1 _1
NameError:未定义名称“\u 1”
In[3]:len(Out)
Out[3]:0

只有在显示这些大型阵列时才会将其分配到缓存(
\u
等),不是吗?赋值
x=largearray
largearray抑制该选项。是的,但是为了显示它们,我必须使用print-then,而不仅仅是键入变量名。所以我还是回到了同一个问题,如何避免这种情况。通常,只显示形状或大数组的一部分(例如前10行或前10列)比显示整个数组更有用。在旧的MATLAB上尤其如此,它在显示大数组时不使用省略号。这实际上给了我正确的想法!仔细查看代码,它会检查中是否存在
,具体取决于版本-
\uuuuuuuuuuuuuuuuuuuuuuuiython.core.py3compat.builtin\umod
。因此,在
\uuuuuu内置
之后,历史就消失了!谢谢哦,我想你把它放在你的创业文件夹里,然后,它是确定的:-)@Michael,你愿意把你的评论变成一个答案吗,也许可以添加一些关于你所做的事情的细节?“我想和你做同样的事情,但我不想修补它,而使用(和upvode)罐装溶液。@jb我在下面添加了一个答案。这个答案在Jupyter下不再有效了。甚至c.TerminalInteractiveShell.cache_size=0也无法工作。如何禁用Out和ux@Matt每次启动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