折叠 jupyter notebook 中的单元格

collapse cell in jupyter notebook

我正在使用 ipython Jupyter 笔记本。假设我定义了一个在我的屏幕上占据大量 space 的函数。有没有办法折叠单元格?

我希望函数保持执行状态和可调用状态,但我想隐藏/折叠单元格以便更好地可视化笔记本。我该怎么做?

您可以创建一个单元格并将以下代码放入其中:

%%html
<style>
div.input {
    display:none;
}
</style>

运行 该单元格将隐藏所有输入单元格。要显示它们,您可以使用菜单清除所有输出。

否则你可以试试下面这样的笔记本扩展:

https://github.com/ipython-contrib/IPython-notebook-extensions/wiki/Home_3x

在 ~/.jupyter/custom/ 中创建 custom.js 文件,内容如下:

$("<style type='text/css'> .cell.code_cell.collapse { max-height:30px; overflow:hidden;} </style>").appendTo("head");
$('.prompt.input_prompt').on('click', function(event) {
    console.log("CLICKED", arguments)   
    var c = $(event.target.closest('.cell.code_cell'))
    if(c.hasClass('collapse')) {
        c.removeClass('collapse');
    } else {
        c.addClass('collapse');
    }
});

保存后重启服务器,刷新notebook。您可以通过单击输入标签 (In[]) 折叠任何单元格。

更新:

较新的 jupyter-lab 是一个更现代且 feature-rich 的界面,默认支持单元格折叠。请参阅下面@intsco 的回答

更新 2

由于 jupyter-lab 现在也支持扩展,您可以使用 Collapsible_Headings 扩展来扩展 built-in cell-folding 功能。

原回答:

jupyter contrib nbextensions Python 软件包包含一个可以在笔记本中启用的 code-folding 扩展。按照 link (Github) 获取文档。

使用命令行安装:

pip install jupyter_contrib_nbextensions
jupyter contrib nbextension install --user

为了更轻松地管理它们,我还推荐 jupyter nbextensions configurator 包。这在您的笔记本界面中提供了一个额外的选项卡,您可以从中轻松地(取消)激活所有已安装的扩展。

安装:

pip install jupyter_nbextensions_configurator
jupyter nbextensions_configurator enable --user

hide_code 扩展允许您隐藏单个单元格,and/or 它们旁边的提示。安装为

pip3 install hide_code

访问 https://github.com/kirbs-/hide_code/ 了解有关此扩展程序的更多信息。

首先,按照Energya的说明:

pip install jupyter_contrib_nbextensions
jupyter contrib nbextension install --user
pip install jupyter_nbextensions_configurator
jupyter nbextensions_configurator enable --user

第二个是关键:打开jupiter notebook后,点击Nbextension选项卡。现在用Nbextension提供的搜索工具"colla"搜索,然后你会找到一个叫做"Collapsible Headings"

的东西

这就是你想要的!

还有改进版的潘颜建议。它添加了显示代码单元格的按钮:

%%html
<style id=hide>div.input{display:none;}</style>
<button type="button" 
onclick="var myStyle = document.getElementById('hide').sheet;myStyle.insertRule('div.input{display:inherit !important;}', 0);">
Show inputs</button>

或python:

# Run me to hide code cells

from IPython.core.display import display, HTML
display(HTML(r"""<style id=hide>div.input{display:none;}</style><button type="button"onclick="var myStyle = document.getElementById('hide').sheet;myStyle.insertRule('div.input{display:inherit !important;}', 0);">Show inputs</button>"""))

我遇到了类似的问题,@Energya 指出的 "nbextensions" 工作得很好而且毫不费力。安装说明很简单(我在 Windows 上尝试使用 anaconda)for the notebook extensions and for their configurator.

也就是说,我想补充一点,您应该对以下扩展程序感兴趣。

  • 隐藏输入 | 此扩展允许在笔记本中隐藏单个代码单元。这可以通过单击工具栏按钮来实现:

  • 可折叠标题 |允许笔记本有可折叠的部分,由标题分隔

  • 代码折叠 |这已被提及,但我添加它是为了完整性

JupyterLab 支持单元格折叠。单击左侧的蓝色单元格栏将折叠单元格。

除了启用扩展外,您不需要做太多事情:

http://localhost:8888/nbextensions?nbextension=collapsible_headings
http://localhost:8888/nbextensions?nbextension=codefolding/main

您很可能会在此处找到所有扩展程序:

http://localhost:8888/nbextensions

正如其他人提到的,您可以通过 nbextensions 执行此操作。我想简要说明我所做的事情,既快速又简单:

启用可折叠标题: 在您的终端中,enable/install Jupyter Notebook Extensions 首先输入:

pip install jupyter_contrib_nbextensions

然后,输入:

jupyter contrib nbextension install

Re-open Jupyter 笔记本。转到 "Edit" 选项卡,然后 select "nbextensions config"。 Un-check 标题正下方的框 "Configurable nbextensions",然后是 select "collapsible headings".

我用来获得期望结果的是:

  1. 将以下代码块保存在名为 toggle_cell.py 的文件中,该文件位于与您的笔记本相同的目录中
from IPython.core.display import display, HTML
toggle_code_str = '''
<form action="javascript:code_toggle()"><input type="submit" id="toggleButton" value="Show Sloution"></form>
'''

toggle_code_prepare_str = '''
    <script>
    function code_toggle() {
        if ($('div.cell.code_cell.rendered.selected div.input').css('display')!='none'){
            $('div.cell.code_cell.rendered.selected div.input').hide();
        } else {
            $('div.cell.code_cell.rendered.selected div.input').show();
        }
    }
    </script>

'''

display(HTML(toggle_code_prepare_str + toggle_code_str))

def hide_sloution():
    display(HTML(toggle_code_str))
  1. 在笔记本的第一个单元格中添加以下内容
from toggle_cell import toggle_code as hide_sloution
  1. 您需要添加切换按钮以简单调用的任何单元格 hide_sloution()

这个问题有很多答案,我觉得所有这些都不令人满意(有些比其他的更多),在许多扩展中 - 代码折叠,按标题折叠等等。None 做我想做的想要以简单有效的方式。我真的很惊讶没有实施解决方案(就像 Jupyter Lab 一样)。

事实上,我非常不满意我开发了一个非常简单的笔记本扩展,它可以 expand/collapse 笔记本单元格中的 代码 ,同时保持其可执行性。

GitHub 存储库:https://github.com/BenedictWilkinsAI/cellfolding

下面是扩展功能的一个小演示:

只需双击代码单元格左侧即可将其折叠成一行:

再次双击将展开单元格。

扩展可以通过 pip 轻松安装:

pip install nbextension-cellfolding
jupyter nbextension install --py cellfolding --user
jupyter nbextension enable --py cellfolding --user 

并且也与 nbextension configurator 兼容。我希望人们会觉得这很有用!

我遇到了同样的问题,我发现这个扩展很有用

pip install aquirdturtle_collapsible_headings