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

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 поддерживает разрушение клеток. Нажав на синюю ячейку слева, вы свернете ячейку. введите описание изображения здесь

intsco
источник
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 (не веб-браузером) , и вы найдете нечто, называемое «Складные заголовки».

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

user40780
источник
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 . Я надеюсь, что люди найдут это полезным!

BenedictWilkinsAI
источник
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()
D Абдалрахман М. Амер
источник