колапс клітини в зошиті юпітера


143

Я використовую ноутбук ipython Jupyter. Скажімо, я визначив функцію, яка займає багато місця на моєму екрані. Чи є спосіб згортання клітини?

Я хочу, щоб функція залишалася виконуваною та дзвонила, але я хочу приховати / згортати комірку, щоб краще візуалізувати ноутбук. Як я можу це зробити?


30
Нічого собі, це вже 2017 рік, і простого рішення немає
user1700890

31
2019 і досі рахується
Гардіан Лоді

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" збігало цілі комірки, а не лише блоки коду.
bsmith89

2
Якщо хтось стикається з проблемами встановлення за допомогою conda, спробуйте: pip install jupyter_contrib_nbextensionsтоді jupyter contrib nbextensions install --sys-prefix --skip-running-check. Я б хотів, щоб юпітер за замовчуванням мав цей пакет.
користувач1700890

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.
NYCeyes

2
Ви МОЖЕТЕ згорнути цілу клітинку, якщо поставити #comment у верхній частині комірки. Потім Юпітер надає стрілку вниз, що згортає всю клітинку.
EatSleepCode

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
shahensha

27

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


6
не зберігається в експорті , хоча
cosmosa

Чи є для цього хороше рішення? Мені дуже погано хочеться приховати згорнуті клітини під час експорту. Я хочу зберегти якийсь код і деякий вихід, а також приховати якийсь інший код і вихід, тому я не можу просто приховати весь код .....
Рассел Річі

2
Код і вихід можна згортати, як описано в цій відповіді. Крім того, інформація зберігається. Він записаний у метадані комірки. source_hiddenі outputs_hiddenвстановлюється. nbformat.readthedocs.io/en/latest/…
gillesB

16

У мене була подібна проблема, і "nbextensions", які вказав @Energya, працювали дуже добре і без особливих зусиль. Інструкції з встановлення прямо (я намагався з анакондою в 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);
Стеохан

2
Це працювало для мене, змінивши 4-й рядок на: var c = $(event.target).closest('.cell.code_cell') та виконуючи пропозицію Стехана, щоб завершити все в setTimeout.
proteome

Ви можете просто використовувати c.toggleClass ('згортання'); замість заяви if-else.
gouravkr

9

Розширення hid_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. Я хотів дати коротке пояснення того, що я зробив, що було швидко і легко:

Щоб увімкнути заголовки, що розгортаються: У своєму терміналі увімкніть / встановіть розширення ноутбука Юпітер, спочатку ввівши:

pip install jupyter_contrib_nbextensions

Потім введіть:

jupyter contrib nbextension install

Повторно відкрийте ноутбук Юпітера. Перейдіть на вкладку "Редагувати" та виберіть "Конфігурація nbextensions". Зніміть прапорець прямо під заголовком "Налаштування nbextensions", а потім встановіть "заголовки, що складаються".


Цікаво, чому не можна отримати доступ nbextensions configбезпосередньо з головної панелі приладів і замість цього потрібно відкрити ноутбук. Як альтернатива, як уже згадували інші, можна отримати доступ до неї через localhost:8888/nbextensions(або той, який порт знаходиться у вашій конфігурації)
Антуан

2

На це питання є багато відповідей, які, на мою думку, не є задовільними (деякі більше, ніж інші), з багатьох розширень - складання коду, складання заголовків тощо тощо. Жоден з них не робить просто і ефективно. Я буквально вражений тим, що рішення не було реалізовано (як це було в лабораторії Юпітера).

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

Репозиторій 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
Коди приховують ВСІ вхідні комірки, а не конкретну комірку.
Джек Флітінг

Якраз те, що я хотів для виведення, але ви можете згортати / приховувати весь результат, перемикаючи його в меню Юпітера: Стільниця> Усі результати>
Перемістити

Сором, це єдине знайдене нами рішення, яке приховує код за замовчуванням і показує його лише при натисканні. На жаль, це приховує всі клітини, а не лише одну цільову.
пенелопа

@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.