jupiter notebook отладка кода

Как оптимизировать работу в Jupyter Notebook

Как оптимизировать работу в Jupyter Notebook

Jupyter Notebook (ранее известный как IPython Notebook) — веб-оболочка для нескольких языков программирования: Julia, Python и R. Это одна из множества технологий, которые позволяют делать жизнь людей проще и лучше. Но установка пакета — только начало, есть множество вещей, которые можно доработать, чтобы сделать процесс разработки ещё удобнее.

В этой статье предполагается, что вы мало знакомы с Jupyter Notebook. Прежде чем мы перейдём к более хитрым трюкам, речь пойдёт о базовых вещах.

Если вы только открываете для себя эту тему, лучше сначала изучить вопрос с установкой и работой Anaconda.

Начало работы

После установки можно сразу приступить к работе. Для этого необходимо выполнить следующее:

Смена темы оформления

Чтобы настроить многими любимый тёмный режим, нужно зайти в терминал и установить Jupyterthemes:

Теперь можно установить тёмную тему:

jupiter notebook отладка кода

Восстановить основную тему можно в любое время:

Найти Jupyterthemes можно в репозитории на GitHub.

Основные команды

jupiter notebook отладка кода

Shift+Enter позволяет запустить текущую ячейку.

Esc переводит в командный режим. Он позволяет перемещаться по документу с помощью клавиш-стрелок.

В командном режиме можно использовать:

Shift+Tab — покажет документацию для объекта, который вы только что ввели в ячейку кода. Для переключения между несколькими режимами продолжайте нажимать это сочетание клавиш.
Esc+F — поможет найти и заменить информацию в коде (кроме выходных данных).
Esc+0 — переключает вывод ячейки.
Shift+J (или Shift+Down ) — выделяет ячейки ниже текущей. Shift+K (или Shift+Up ) выделяет ячейки выше текущей. Как только ячейки выбраны, их можно удалить/скопировать/вырезать/вставить/запустить как пакет. Это удобно, когда нужно переместить только часть документа.
Shift+M — позволяет объединить несколько ячеек.

jupiter notebook отладка кода

Кроме того, в документе можно запускать bash-команды, если в начале поставить восклицательный знак:

Чтобы отключить отображение результата выражения в последней строчке ячейки, добавьте в конце последней строчки точку с запятой ( ; ).

Комментирование/раскомментирование блока кода

jupiter notebook отладка кода

LaTex

Вы можете писать на LaTex в Markdown-ячейках, и они будет отображены в виде формулы.

Данная строка будет преобразована в следующую формулу:

jupiter notebook отладка кода

Отображение данных из всех ячеек

Отображение по умолчанию:

jupiter notebook отладка кода

Отображение всех ячеек:

jupiter notebook отладка кода

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

Изменение настроек следует запускать в отдельной ячейке, чтобы оно вступило в силу при следующем запуске ячейки.

Расширения

Поскольку Jupyter Notebook имеет открытый исходный код, для него было разработано множество расширений. Вы можете поработать с официальным списком расширений IPython или посмотреть другие популярные расширения.

Вы можете установить Nbextensions в любое время из командной строки.

Или с помощью Anaconda:

Как только они будут установлены, вы увидите вкладку Nbextensions.

jupiter notebook отладка кода

В этом репозитории можно узнать больше о расширениях, об их включении в ваш документ и исключении из него.

Для работы просто нажмите «Nbextensions» в верхней части экрана, выберите интересующее вас расширение, а затем прокрутите вниз, чтобы найти нужную информацию.

jupiter notebook отладка кода

Популярные расширения

Магия

Магия — это удобные команды, которые облегчают жизнь, когда вы хотите выполнить определённые задачи. Они часто выглядят как команды Unix, но все они реализованы на Python.

Есть два вида магии: строчная магия (применяется к одной строке) и магия ячейки (применяется ко всей ячейке). Строчная магия начинается с символа процента ( % ), а магия ячейки — с двух таких символов ( %% ).

Чтобы увидеть доступную магию, нужно запустить следующее:

jupiter notebook отладка кода

Настройка среды разработки

Можно легко управлять переменными среды вашего документа с помощью %env без перезагрузок. Выполните эту команду без каких-либо переменных, она отобразит все ваши переменные среды.

jupiter notebook отладка кода

Вставка кода

С помощью %load можно вставить код из внешнего скрипта.

Данная команда возьмёт файл basic_imports.py и загрузит его в ваш документ.

Экспорт содержимого ячейки

Это очень полезно, если вы используете один и тот же импорт в каждом документе или постоянно добавляете одну и ту же функцию. Теперь вы можете написать код один раз и использовать его везде.

Дальше можно его загрузить в любое время, написав:

Выполнение этой команды заменяет содержимое ячейки загруженным файлом.

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

jupiter notebook отладка кода

Сохранение и повторное использование кода

Как и у большинства людей, у вас периодически могут быть одни и те же задания. Возможно, есть несколько уравнений, которые вы постоянно решаете, или несколько строк кода, которые вы создавали много раз. Jupyter позволяет сохранять фрагменты кода как исполняемые макросы. Поскольку макросы — это просто код, он может содержать переменные, которые должны быть определены перед выполнением.

Теперь, чтобы определить макрос, нужен код для использования. Можно сохранить практически всё, от строки до функции.

Чтобы загрузить макрос, достаточно выполнить следующее.

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

Для наглядного примера измените переменную, использованную в макросе.

При запуске макроса захватывается измененное значение.

jupiter notebook отладка кода

Это работает, потому что макросы выполняют сохраненный код в пространстве имён ячейки. Если name будет не определено, вы получите ошибку.

%store позволяет хранить макрос и использовать его во всех Jupyter Notebook.

jupiter notebook отладка кода

jupiter notebook отладка кода

Магия run

Магия pycat

Использование %pycat покажет содержимое скрипта, если вы не уверены, что в нём находится.

jupiter notebook отладка кода

Автосохранение

%autosave определяет, как часто ваш документ будет автоматически сохранять контрольные точки в файл.

После данной команды автосохранение будет происходить каждые 60 секунд.

Отображение графиков

Эта команда отобразит графики Matplotlib прямо в выводе ячейки. Это означает, что диаграммы и графики Matplotlib можно включать прямо в свои документы. Имеет смысл запустить команду в начале вашего документа, прямо в первой ячейке.

jupiter notebook отладка кода

Измерение времени

Основное различие между %timeit и %time состоит в том, что первая выполняет указанный код много раз и вычисляет среднее значение.

%%time даст вам информацию о единичном запуске кода в вашей ячейке.

Запуск кода из другого ядра

Можно запустить выполнение ячейки с использованием указанного языка. Существуют расширения для нескольких языков. Есть опции вроде:

Например, для рендеринга HTML в вашем документе вы должны выполнить следующее:

jupiter notebook отладка кода

Вы также можете использовать LaTeX напрямую когда угодно:

jupiter notebook отладка кода

Магия who

Если набрать данную команду, результат будет следующим.

jupiter notebook отладка кода

Магия prun

%prun показывает, сколько времени ваша программа потратила на каждую функцию. Использование %prun statement_name даёт упорядоченную таблицу, показывающую, сколько раз каждая внутренняя функция была вызвана в блоке. А также время, которое потребовалось на каждый вызов, и суммарное время всех запусков функции.

Магия отладчика в Python

Jupyter имеет собственный интерфейс для отладчика Python. Это позволяет заглянуть внутрь функции и посмотреть, что там происходит. Включить эту магию можно, запустив %pdb в начале ячейки.

Графики высокого разрешения

Одна простая магическая строка IPython может предоставит вам на выводе график с двойным разрешением для экранов Retina. Стоит отметить, что на других экранах график может не отображаться.

Пропуск ячейки для выполнения

Просто добавьте %%script false в начале ячейки:

Оповещения

Оповещения могут пригодиться, когда вы запускаете код, требующий долгого выполнения. Вы можете настроить уведомление, которое будет отправлено, когда код выполнится.

На Linux и Mac

На Windows

Но это сработает, только если вы пользуетесь Homebrew.

Выводы

Изложенного в этой статье должно быть достаточно для успешного начала работы в Jupyter Notebook. Если вы знаете какие-либо советы и рекомендации, которые могут помочь другим новичкам, напишите об этом в комментариях ниже.

Если вы хотите подняться на уровень повыше, вас может заинтересовать другая статья по оптимизации Jupyter Notebook.

Хинт для программистов: если зарегистрируетесь на соревнования Huawei Cup, то бесплатно получите доступ к онлайн-школе для участников. Можно прокачаться по разным навыкам и выиграть призы в самом соревновании.

Перейти к регистрации

Источник

Нативное редактирование Jupyter Notebooks в VS Code

Вы можете управлять исходным кодом, открывать несколько файлов и использовать такие функции, как IntelliSense, интеграцию с Git и управление несколькими файлами. Все они предлагают совершенно новые способы для дата-сайнтистов и разработчиков эффективно экспериментировать и работать с данными. Вы можете попробовать все это уже сегодня, загрузив последнюю версию расширения Python и создав/открыв Jupyter Notebook внутри VS Code.

jupiter notebook отладка кода

Начиная с первой публикации наших практик в области анализа данных в VS Code одной из главных функций, которую запрашивали пользователи, являлся макет, похожий на блокнот, для редактирования собственных блокнотов Jupyter в VS Code. В оставшейся части этого поста мы рассмотрим эти новые возможности VS Code.

Начало работы

Для начала, расскажем как начать работу с Jupyter в VS Code.

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

Автозаполнение на базе AI

Во время написания кода IntelliSense даст вам интеллектуальные подсказки прямо в ячейках. Кроме того, вы можете значительно расширить возможности своего редактора, установив наше расширение IntelliCode, чтобы получить IntelliSense на базе AI с более интеллектуальными предложениями автозаполнения, основанными на текущем контексте кода.

jupiter notebook отладка кода

Обозреватель переменных

Еще одним преимуществом использования VS Code является то, что вы можете воспользоваться обозревателем переменных и средством просмотра графиков, нажав кнопку «Переменные» на панели инструментов блокнота. Обозреватель переменных поможет вам в реальном времени отслеживать текущее состояние переменных вашего блокнота.

jupiter notebook отладка кода

Теперь вы можете просматривать свои наборы данных, фильтровать данные и даже экспортировать графики! Прошли те времена, когда вам приходилось вводить df.head() для просмотра данных.

Подключение к удаленным серверам Jupyter

Когда файл блокнота Jupyter создается или открывается, VS Code автоматически создает сервер Jupyter локально по умолчанию. Если вы хотите использовать удаленный сервер Jupyter, это тоже просто и реализуется с помощью команды «Specify Jupyter server URI» через VS Code command palette и ввод URI сервера.

jupiter notebook отладка кода

Экспорт в виде кода Python

Источник

Особенности Jupyter Notebook, о которых вы (может быть) не слышали

Jupyter Notebook – это крайне удобный инструмент для создания красивых аналитических отчетов, так как он позволяет хранить вместе код, изображения, комментарии, формулы и графики:

jupiter notebook отладка кода

Ниже мы расскажем о некоторых фишках, которые делают Jupyter очень крутым. О них можно прочитать и в других местах, но если специально не задаваться этим вопросом, то никогда и не прочитаешь.

Jupyter поддерживает множество языков программирования и может быть легко запущен на любом сервере, необходим только доступ по ssh или http. К тому же это свободное ПО.

Основы

Список хоткеев вы найдете в Help > Keyboard Shortcuts (список периодически дополняется, так что не стесняйтесь заглядывать туда снова).

Отсюда можно получить представление о взаимодействии с блокнотом (notebook). Если вы будете постоянно работать c Jupyter, большинство комбинаций вы быстро выучите.

Экспорт блокнота

Простейший способ — сохранить блокнот в формате IPython Notebook (.ipynb), но так как их используют не все, есть и другие варианты:

Построение графиков

Есть несколько вариантов построения графиков:

Magic-команды

Магические команды (magics) превращают обычный python в магический python. Magic-команды — это ключ к могуществу IPython’а.

Можно управлять переменными среды для вашего блокнота без перезапуска Jupyter-сервера. Некоторые библиотеки (такие, как theano) используют переменные среды, чтобы контролировать поведение, и %env — самый удобный способ.

Выполнение shell-команд

В Notebook можно вызвать любую shell-команду. Это особенно удобно для управления виртуальной средой.

Подавление вывода последней строки

Иногда вывод не нужен, и в этом случае можно или использовать команду pass с новой строки, или поставить точку запятой в конце строки:

jupiter notebook отладка кода

вызовет следующее всплывающее окно:

Используйте %run для выполнения кода на Python

Но эта команда может выполнять и другие блокноты из Jupyter! Иногда это очень полезно.

Обратите внимание, что %run — это не то же, что импорт python-модуля.

jupiter notebook отладка кода
jupiter notebook отладка кода
jupiter notebook отладка кода
jupiter notebook отладка кода

jupiter notebook отладка кода
jupiter notebook отладка кода

jupiter notebook отладка кода

Загрузит код напрямую в ячейку. Можно выбрать файл локально или из сети.

Если раскомментировать и выполнить код ниже, содержание ячейки заменится на содержание файла.

%store — ленивая передача данных между блокнотами

%who для анализа переменных глобального пространства имен

Тайминг

Если вы хотите замерить время выполнения программы или найти узкое место в коде, на помощь придет IPython.

Профилирование: %prun, %lprun, %mprun

%lprun позволяет профилировать с точностью до строк кода, но, кажется, в последнем релизе Python он не работает, так что в этот раз обойдемся без магии:

Дебаг с помощью %debug

У Jupyter есть собственный интерфейс для ipdb, что позволяет зайти внутрь функции и посмотреть, что в ней происходит.

Это не PyCharm — потребуется время, чтобы освоить, но при необходимости дебага на сервере это может быть единственным вариантом (кроме pdb через терминал).

Немного более простой способ — команда %pdb, которая активирует дебаггер, когда выбрасывается исключение:

Запись формул в LateX

Маркдаун ячейки могут отрисовывать формулы LateX с помощью MathJax.

jupiter notebook отладка кода

Маркдаун — важная часть блокнотов, так что не забывайте использовать его выразительные возможности!

Использование разных языков внутри одного блокнота

Если вы соскучились по другим языкам программирования, можете использовать их в Jupyter Notebook:

Анализ Big Data

Существует несколько решений, чтобы запрашивать/обрабатывать большие объемы данных:

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

Такие сервисы, как mybinder, предоставляют доступ к Jupiter Notebook со всеми установленными библиотеками, так что пользователь может с полчаса поиграться с вашим кодом, имея под рукой только браузер.

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

Написание функций на других языках

Иногда скорости NumPy бывает недостаточно, и мне необходимо написать немного быстрого кода. В принципе, можно собрать нужные функции в динамические библиотеки, а затем написать обертку на Python…

Но гораздо лучше, когда скучная часть работы сделана за нас, правда?

Ведь можно написать нужные функции на Cython или Fortran и использовать их напрямую из кода на Python.

Для начала нужно установить модули

Лично я предпочитаю Fortran, на котором, я считаю, удобно писать функции для обработки большого объема численных данных. Подробнее о его использовании можно почитать здесь.

Должен заметить, что есть и другие способы ускорить ваш код на Python. Примеры можно найти в моем блокноте.

Множественный курсор

С недавнего времени Jupyter поддерживает множественный курсор, такой, как в Sublime или IntelliJ!

jupiter notebook отладка кода
Источник: swanintelligence.com/multi-cursor-in-jupyter.html

Расширения Jupyter-contrib

устанавливаются с помощью

jupiter notebook отладка кода

Это целое семейство различных расширений, включая, например, jupyter spell-checker и code-formatter, которых по умолчанию в Jupyter нет.

RISE: презентации в Notebook

Расширение, написанное Damian Avila, позволяет демонстрировать блокноты как презентации. Пример такой презентации: bollwyvl.github.io/live_reveal/#/7

Это может пригодиться, если вы обучаете использованию какой-либо библиотеки.

Система вывода Jupyter

Блокноты отображаются в HTML, и вывод ячейки тоже может быть в формате HTML, так что вы можете выводить все, что душе угодно: видео, аудио, изображения.

В этом примере я просматриваю содержимое директории с картинками в моем репозитории и отображаю первые пять из них.

jupiter notebook отладка кода
jupiter notebook отладка кода
jupiter notebook отладка кода
jupiter notebook отладка кода
jupiter notebook отладка кода

Я мог бы получить тот же список bash-командой,

потому что magic-команды и bash-вызовы возвращают переменные Python:

Повторное подключение к ядру

Давным давно, если вы запускали какой-нибудь долгий процесс и в какой-то момент подключение к серверу IPython прерывалось, вы полностью теряли возможность отслеживать процесс вычислений (если только вы не записывали эти данные в файл). Приходилось или прерывать работу ядра с риском потерять некоторые результаты, или ждать окончания процесса, не имея представления о том, что в данный момент происходит.

Теперь опция Reconnect to kernel позволяет заново подключиться к работающему ядру, не прерывая вычислений, и увидеть последний вывод (хотя какая-то часть вывода все же будет потеряна).

Пишите ваши посты в Notebook

такие, как этот. Используйте nbconvert, чтобы экспортировать в HTML.

Источник

Визуальный отладчик для Jupyter

Прогресс большинства программных проектов строится на малых изменениях, которые, перед тем, как двигаться дальше, тщательно оценивают. Быстрое получение результатов выполнения кода и высокая скорость итеративной разработки — это одни из основных причин успеха Jupyter. В особенности — в сфере научных исследований.

Пользователи Jupyter любят проводить в блокнотах эксперименты, они используют блокноты как интерактивное средство коммуникации. Правда, если говорить о задачах классической разработки ПО, например, о рефакторинге большой кодовой базы, то можно сказать, что для решения таких задач Jupyter часто меняют на обычные IDE.

jupiter notebook отладка кода

Проект Jupyter уже несколько лет прилагает усилия к тому, чтобы закрыть разрыв между блокнотами и обычными IDE. Эти усилия, в значительной мере, представлены платформой JupyterLab, которая даёт разработчику более совершенный и удобный интерфейс, в который входят менеджер файлов, текстовые редакторы, консоли, блокноты.

Правда, до недавнего времени в JupyterLab кое-чего не хватало. Речь идёт о том, что являло собой главную причину, по которой пользователи вынуждены были переключаться на другие среды. Пользователям Jupyter не хватало визуального отладчика. Пользователи, особенно те из них, которые привыкли к обычным IDE, долго просили об этой возможности.

Отладчик для Jupyter

Сегодня, после нескольких месяцев разработки, мы рады представить вашему вниманию первый публичный релиз визуального отладчика для Jupyter!

Это — лишь первый релиз, но отладчик уже позволяет устанавливать в ячейках блокнотов и в файлах с исходным кодом точки останова. Он позволяет исследовать содержимое переменных, просматривать стек вызовов. И этим его возможности не ограничиваются.

jupiter notebook отладка кода

Визуальный отладчик Jupyter в действии

Испытание отладчика на сайте проекта binder

jupiter notebook отладка кода

Попробовать новый отладчик в деле можно на сайте проекта binder. Вот демонстрационный блокнот, с которым вы можете поэкспериментировать.

Установка

Фронтенд отладчика можно установить в виде расширения JupyterLab:

В будущих релизах фронтенд отладчика будет включён в состав JupyterLab по умолчанию.

На бэкенде, для обеспечения работы отладчика, должно присутствовать ядро, в котором реализован Jupyter Debug Protocol (подробнее о нём мы поговорим ниже). Пока единственное ядро, в котором реализован данный протокол, это — xeus-python. Оно представляет собой Jupyter-ядро для языка программирования Python. (В планах развития проекта есть и поддержка протокола отладчика в ipykernel.)

Установить ядро xeus-python можно так:

После того, как xeus-python и расширение отладчика установлены, всё должно быть готово к работе с визуальным отладчиком Jupyter.

Обратите внимание на то, что существуют и PyPI-«колёса» для xeus-python, но ни всё ещё носят статус экспериментальных, а их доступность зависит от платформы.

Подробности о Jupyter Debug Protocol

▍Новые типы сообщений для каналов Control и IOPub

Ядра Jupyter (та часть инфраструктуры, которая выполняет пользовательский код) общаются с другими частями системы с использованием чётко разработанного протокола межпроцессного взаимодействия.

Существуют несколько коммуникационных каналов:

▍Расширение Debug Adapter Protocol

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

Популярным стандартом в сфере отладки является протокол Debug Adapter Protocol (DAP), разработанный Microsoft. Это — протокол, основанный на JSON, который, например, лежит в основе подсистемы отладки Visual Studio Code. Этот протокол поддерживает множество бэкендов, рассчитанных на различные языки.

Правда, в случае с Jupyter этого оказалось не вполне достаточно:

Все эти расширения протокола ядра Jupyter были предложены в качестве кандидатов на включение в официальную спецификацию. Соответствующее предложение по развитию Jupyter (Jupyter Enhancement Proposal, JEP) можно найти здесь.

Xeus-python — первое ядро Jupyter, поддерживающее отладку

Xeus — это С++-реализация протокола ядра Jupyter. Это, само по себе, не ядро. Это — библиотека, которая помогает разрабатывать ядра. Эта библиотека полезна при разработке ядер для языков, которые имеют C- или C++-API (вроде Python, Lua или SQL). Она берёт на себя решение трудоёмких задач по реализации протокола обмена сообщениями Jupyter. Это позволяет автору ядра сосредоточиться на задачах, связанных с интерпретацией языковых конструкций: на выполнении кода, на его анализе и так далее.

С использованием xeus было разработано несколько ядер, включая популярное ядро xeus-cling для C++, основанное на C++-интерпретаторе cling, созданном в CERN. Ядро xeus-python — это альтернатива ipykernel, основанная на xeus. Вот материал о первом релизе ядра xeus-python.

Ядро xeus-python подошло для первой реализации протокола отладчика по нескольким причинам:

▍План развития ядра xeus-python

Среди краткосрочных целей развития xeus-python можно отметить следующие:

▍О других ядрах

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

В этом году мы будем работать над тем, чтобы обеспечить поддержку отладки в как можно большем количестве ядер.

Скоро поддержка отладки появится для других ядер, основанных на xeus, имеющих много общего с ядром xeus-python. Например, для таких, как xeus-cling.

Подробности об архитектуре фронтенда отладчика

Расширение отладчика для JupyterLab даёт пользователям механизмы, наличия которых обычно ожидают от IDE:

Расширение поддерживает этот специфический сценарий и умеет выводить код ранее выполненной ячейки в режиме только для чтения.

jupiter notebook отладка кода

Переход в код, находящийся в удалённой ячейке

Отлаживать можно и код, находящийся в консолях и в файлах.

jupiter notebook отладка кода

Отладка кода из консоли в JupyterLab

jupiter notebook отладка кода

Отладка в JupyterLab кода, находящегося в файле

Отладку можно включить на уровне блокнота, что позволят пользователям отлаживать блокнот и, в то же время, работать с другим блокнотом.

jupiter notebook отладка кода

Одновременная отладка нескольких блокнотов

Переменные можно просматривать, пользуясь древовидным или табличным представлением.

jupiter notebook отладка кода

Средства для исследования переменных

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

Благодаря тому, что расширение полагается на протокол DAP, оно абстрагирует особенности различных языков и даёт пользователю единообразный интерфейс отладки.

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

jupiter notebook отладка кода

Планы на будущее

В 2020 году мы планируем серьёзно улучшить отладчик. А именно, речь идёт о следующем:

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *