Как Jupyter превратился в полноценную IDE

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

Однако в один прекрасный момент разработчики ПО обращаются к классическим IDE (интегрированным средам разработки), таким как Visual Studio Code и Pycharm, для преобразования идей в библиотеки и фреймворки. Есть ли способ превратить Jupyter в полноценную IDE, в которой «сырые» концепции преобразуются в надежные и повторно используемые модули?

С этой целью разработчики из нескольких организаций, включая QuantStack, Two Sigma, Bloomberg и fast.ai, создали два новых инструмента: nbdev и визуальный отладчик для Jupyter.

Грамотное программирование и nbdev

В 1983 году Дональд Кнут предложил новую парадигму — грамотное программирование. По его словам, эта методика объединяет язык программирования с языком документации, что делает программы более надежными, портативными, поддерживаемыми и, возможно, более интересными для написания, чем те, которые написаны только на языке высокого уровня. Основная идея состоит в том, чтобы рассматривать программу как литературное произведение, предназначенное для людей, а не для компьютера.

В конце прошлого года поклонники этого подхода, Джереми Ховард и Сильвен Гаггер, представили nbdev. С помощью этого фреймворка работу и эксперименты с кодом можно выполнять в знакомой нам среде Jupyter Notebook. nbdev также позволяет извлечь полезную функциональность в полноценную библиотеку Python с помощью определенных ключевых слов.

В частности, nbdev дополняет Jupyter, добавляя поддержку:

  • автоматического создания модулей Python из ноутбуков, согласно лучшим практикам;
  • редактирования и навигации по коду в стандартной IDE;
  • синхронизации любых изменений с ноутбуками;
  • автоматического создания доступной для поиска по гиперссылкам документации из кода;
  • загрузки установщиков pip в PyPI;
  • тестирования;
  • непрерывной интеграции;
  • обработки конфликтов контроля версий.

С помощью nbdev разработчики ПО и специалисты по данным могут создавать хорошо задокументированные библиотеки Python, соответствующие лучшим практикам, не покидая среды Jupyter. nbdev находится на PyPI, поэтому для установки просто запустите:

pip install nbdev

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

git clone https://github.com/fastai/nbdev
pip install -e nbdev

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

Недостающая часть

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

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

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

Чтобы воспользоваться этим новым инструментом, необходимо использовать ядро, реализующее протокол отладки Jupyter в бэкенде. Следовательно, первым шагом будет установка этого ядра. На данный момент такая реализация возможна только с xeus-python. Чтобы установить его, просто выполните:

conda install xeus-python -c conda-forge

Затем запустите Jupyter Lab. Найдите в боковом меню Extension Manager и включите его, если он еще не запущен.

Включение менеджера расширений

На боковой панели появится новая кнопка. Чтобы установить отладчик, просто перейдите на запущенную кнопку Extension Manager и найдите расширение debugger.

Включение отладчика

После установки Jupyter Lab попросит выполнить сборку, чтобы включить последние изменения. Нажмите «принять», и через несколько секунд вы уже будете готовы к работе.

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

Включение отладчика

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

Отладка кода

Программа остановилась на точке останова. Открыв панель отладчика, мы увидим переменные, список точек останова, навигацию по стеку вызовов и исходный код.

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

  • поддержка рендеринга MIME-типов в обозревателе переменных;
  • поддержка условных точек останова в пользовательском интерфейсе;
  • возможность отладки информационных панелей Voilà из расширения предварительного просмотра JupyterLab Voilà;
  • включение отладки с максимально возможным количеством ядер.

Заключение

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

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

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

Читайте также:


Перевод статьи Dimitris Poulopoulos: Jupyter is now a full-fledged IDE