Completely disable IPython output caching

2019-03-10 03:40发布

I'm dealing with some GB-sized numpy arrays in IPython. When I delete them, I definitely want them gone, in order to recover the memory. IPythons output cache is quite annoying there, as it keeps the objects alive even after deleting the last actively intended reference to them. I already set

c.TerminalInteractiveShell.cache_size = 0

in the IPython configuration, but this only disables caching of entries to _oh, the other variables like _, __ and so on are still created. I'm also aware of %xdel, but anyways, I'd prefer to disable it completely, as I rarely use the output history anyways, so that a plain del would work again right away.

4条回答
爷、活的狠高调
2楼-- · 2019-03-10 03:55

Looking at IPython/core/displayhook.py Line 209-214 I would say that it is not configurable. You could try making a PR to add an option to disable it totally.

查看更多
Evening l夕情丶
3楼-- · 2019-03-10 04:01

Seems that we can suppress the output cache by putting a ";" at the end of the line now.

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

查看更多
4楼-- · 2019-03-10 04:12

Enter

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

and your history should be gone.

Edit:

Seems like the path to the config directory is sometimes a bit different, either ~/.config/ipython or just ~/.ipython/. So just check which one you got and adjust the path accordingly. The solution still works with jupyter console.

查看更多
ら.Afraid
5楼-- · 2019-03-10 04:12

Create an ipython profile:

!ipython profile create

The output might be (for 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'

Then add the line 'c.InteractiveShell.cache_size = 0' to the ipython_kernel_config.py file by

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

Load another ipython kernel and check if this work

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
查看更多
登录 后发表回答