Свернуть ячейку в блокноте Юпитера


143

Я использую ноутбук ipython Jupyter. Допустим, я определил функцию, которая занимает много места на моем экране. Есть ли способ разрушить клетку?

Я хочу, чтобы функция оставалась выполненной и вызываемой, но я хочу скрыть / свернуть ячейку, чтобы лучше визуализировать блокнот. Как я могу это сделать?


30
Вау, это уже 2017 год, и нет простого решения
— user1700890

31
2019 и до сих пор подсчета
— Hardian Лои

23
2020 ... (первый!)
— itzy

5
Ах, я поставлю напоминание, чтобы я мог быть первым в 2021 году
— новичок

6
JupyterLab имеет это с 2019 года. Выделите ячейку, а затем нажмите на синюю полосу рядом с ней. Теперь вы увидите, что он представлен тремя точками. Это будет соблюдаться, когда вы сохраните и откроете позже или в другом месте. Есть дополнительные функции и опции, такие как View> Collapse All Code, смотрите здесь и ссылку здесь .
— Уэйн

Ответы:


94

Пакет jupyter contrib nbextensionsPython содержит расширение свертывания кода, которое можно включить в блокноте. Перейдите по ссылке (Github) для документации.

Чтобы установить с помощью командной строки:

pip install jupyter_contrib_nbextensions
jupyter contrib nbextension install --user

Чтобы облегчить управление ими, я бы также порекомендовал jupyter nbextensions configuratorпакет. Это обеспечивает дополнительную вкладку в интерфейсе вашего ноутбука, откуда вы можете легко (де) активировать все установленные расширения.

Монтаж:

pip install jupyter_nbextensions_configurator
jupyter nbextensions_configurator enable --user

11
Классная штука, хотя я бы хотел, чтобы "Codefolding" nbextension сложил целые ячейки, а не только блоки кода.
— bsmith89

2
Если у кого-то возникнут проблемы с установкой conda, попробуйте: pip install jupyter_contrib_nbextensionsзатем jupyter contrib nbextensions install --sys-prefix --skip-running-check. Я хотел бы, чтобы jupyter имел этот пакет по умолчанию.
— user1700890

7
Простейшее путь установки по самой Конде : conda install -c conda-forge jupyter_contrib_nbextensions.
— Макс Генис

3
Просто быстрое примечание для тех, кто использует более новую версию JupyterLab. Согласно упомянутому сайту GitHub, эти расширения работают в JupyterLab. Я сам удивлялся этому, поэтому решил, что я дам знать другим. Цитирование репо GitHub: Due to major differences between the Jupyter Notebook and JupyterLab, the extensions in this repository will not work in JupyterLab.
— Нью-Йорк Сити

2
Вы МОЖЕТЕ свернуть всю ячейку, если поместите #comment вверху ячейки. Затем Jupyter предоставляет стрелку раскрывающегося списка, которая разрушит всю ячейку.
— EatSleepCode

29

JupyterLab поддерживает разрушение клеток. Нажав на синюю ячейку слева, вы свернете ячейку. введите описание изображения здесь


6
не сохраняется в экспорте, хотя
— Космос

Есть ли хорошее решение для этого? Я очень сильно хочу скрыть свернутые ячейки при экспорте. Я хочу сохранить некоторый код и некоторые выходные данные, а также скрыть некоторый другой код и выходные данные, чтобы я не мог просто скрыть весь код .....
— Рассел Ричи

2
Код и выходные данные могут быть свернуты, как описано в этом ответе. Кроме того, информация сохраняется. Это записано в метаданных ячейки. source_hiddenи outputs_hiddenустановлен. nbformat.readthedocs.io/en/latest/…
— gillesB

27

Вы можете создать ячейку и поместить в нее следующий код:

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

Запуск этой ячейки скроет все входные ячейки. Чтобы показать их обратно, вы можете использовать меню для очистки всех выходов.

В противном случае вы можете попробовать расширения ноутбука, как показано ниже:

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


Расширения для ноутбуков действительно хороши. Есть еще куча других вещей. github.com/ipython-contrib/jupyter_contrib_nbextensions
— шахенша

16

У меня была похожая проблема, и «nbextensions», указанные @Energya, работали очень хорошо и без усилий. Инструкции по установке просты (я пробовал с anaconda на Windows) для расширений ноутбука и их конфигуратора .

Тем не менее, я хотел бы добавить, что следующие расширения должны представлять интерес.

  • Скрыть вход | Это расширение позволяет скрыть отдельную кодовую ячейку в блокноте. Это может быть достигнуто путем нажатия на кнопку панели инструментов: Скрыть вход

  • Складные заголовки | Позволяет записной книжке иметь разделы, разделенные заголовками Складные заголовки

  • Кодфолдинг | Это было упомянуто, но я добавляю это для полноты сворачивание


9

Создайте файл custom.js внутри ~ / .jupyter / custom / со следующим содержимым:

$("<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');
    }
});

После сохранения перезагрузите сервер и обновите записную книжку. Вы можете свернуть любую ячейку, нажав на метку ввода (In []).


3
Это не сработало для меня, так как изменяемый div не загружается, когда выполняется пользовательский js. Тем не менее, это можно исправить упаковкой всего в setTimeout (function () {...}, 3000);
— Steohan

2
Это сработало для меня после изменения 4-й строки на: var c = $(event.target).closest('.cell.code_cell') и после предложения Steohan обернуть все в setTimeout.
— протеом

Вы можете просто использовать c.toggleClass ('collapse'); вместо оператора if-else.
— gouravkr

9

Расширение hide_code позволяет скрывать отдельные ячейки и / или подсказки рядом с ними. Установить как

pip3 install hide_code

Посетите https://github.com/kirbs-/hide_code/ для получения дополнительной информации об этом расширении.


9

Во-первых, следуйте инструкциям Energya:

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

Второй ключ: после открытия блокнота Юпитер, нажмите вкладку Nbextension. Теперь выполните поиск «колла» в инструменте поиска, предоставленном Nbextension (не веб-браузером) , и вы найдете нечто, называемое «Складные заголовки».

Это то, что вы хотите!


2

Как уже упоминали другие, вы можете сделать это с помощью nbextensions. Я хотел дать краткое объяснение того, что я сделал, что было быстро и легко:

Чтобы включить складные заголовки: включите / установите Jupyter Notebook Extensions в своем терминале, сначала введя:

pip install jupyter_contrib_nbextensions

Затем введите:

jupyter contrib nbextension install

Снова откройте блокнот Jupyter. Перейдите на вкладку «Редактировать» и выберите «Конфигурация nbextensions». Снимите флажок прямо под заголовком «Настраиваемые расширения», затем выберите «Складные заголовки».


Интересно, почему нельзя получить доступ nbextensions configнапрямую с главной панели и вместо этого приходится открывать блокнот. Кроме того, как уже упоминали другие, можно получить к нему доступ через localhost:8888/nbextensions(или какой порт в вашей конфигурации)
— Антуан

2

Есть много ответов на этот вопрос, и все они, на мой взгляд, не являются удовлетворительными (некоторые больше, чем другие), из многих расширений - свертывание кода, сворачивание по заголовкам и т. Д. И т. Д. Никто не делает то, что я хочу, простым и эффективным способом. Я буквально поражен тем, что решение не было реализовано (как это было для Jupyter Lab).

На самом деле я был настолько недоволен, что разработал очень простое расширение для ноутбука, которое может развернуть / свернуть код в ячейке ноутбука, сохраняя его исполняемым.

Репозиторий GitHub: https://github.com/BenedictWilkinsAI/cellfolding

Ниже приведена небольшая демонстрация того, что делает расширение:

Простое двойное нажатие слева от ячейки кода свернет его в одну строку:

Двойной щелчок снова расширит ячейку.

Расширение может быть легко установлено с помощью pip:

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

и также совместим с конфигуратором nbextension . Я надеюсь, что люди найдут это полезным!


2
Работал как шарм. Аккуратный
— Аян Митра

1

Есть также улучшенная версия предложения Пан Яна. Добавляет кнопку, которая показывает ячейки кода назад:

%%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>

Или питон:

# 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>"""))

2
Коды скрывают ВСЕ входные ячейки, а не конкретную ячейку.
— Джек Мимолетный

Как раз то, что я хотел для вывода, но вы можете свернуть / скрыть весь вывод, переключив его в меню Jupyter: Cell> All Output> Toggle
— markling

Жаль, это единственное решение, которое я нашел, которое скрывает код по умолчанию и показывает его только при нажатии. К сожалению, это скрывает все клетки, а не только одну целевую.
— Пенелопа

@penelope вы можете проверить, имеют ли разные ячейки разные идентификаторы HTML-элементов или уникальные классы. Если да, то вы можете изменить мой ответ соответственно. Мой ответ влияет на все клетки, потому что он не различает клетки.
— Петр Загубисало

1

Вам не нужно ничего делать, кроме как включить расширения:

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

введите описание изображения здесь

Скорее всего, вы найдете все свои расширения здесь:

http://localhost:8888/nbextensions

введите описание изображения здесь


1

То, что я использую, чтобы получить желаемый результат:

  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()
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.