Продолжаем разговор о Jupyter и PowerShell
В этот раз мы поговорим обо всем этом более подробно. Для начала - зачем нам все это может понадобиться. Затем немного детальней о том, как это работает. И наконец - как сделать ноутбук и поделиться им со всем миром, ну или с другими командами на вашем проекте. Поехали
Небольшой шаг назад
Давайте немного повторим азы.
Jupyter Notebook – это веб-приложение, которое позволяет создавать и делиться документами, содержащими живой код, уравнения, визуализации и объяснительный текст. Эти документы, ”записные книжки” или “ноутбуки”, кому как нравится, можно использовать для анализа данных, статистического моделирования, машинного обучения и многого другого.
Ноутбуки работают со своим форматом файла - ipynb. Сокращение ipynb происходит от IPython Notebook, где IPython - это интерактивный интерпретатор Python, на котором изначально был основан Jupyter. Файлы .ipynb
сохраняют и воспроизводят ваш код вместе с результатами и комментариями, что делает их отличным инструментом для обучения и совместной работы.
Azure Devops и Github дают возможность открывать эти интерактивные ноутбуки в режиме read only прямо в браузере, что делает процесс разработки и совместной работы еще более гладким и шелковистым. Это как иметь интерактивную книгу или интерактивный отчет, которым можно легко поделиться с командой и который всегда будет актуальным, благодаря живому коду внутри него.
Зачем все это нужно, спросите вы. Вот несколько сценариев
- Автоматизация: Jupyter Notebooks позволяет создать автоматизированные руководства, которые пригодятся при возникновении проблем. Это может быть особенно полезно для повторяющихся или трудоемких задач, где можно создать ноутбуки с документированными шагами, которые автоматически запускаются, когда что-то идет не так.
- Совместная работа: С помощью Jupyter Notebooks команды могут с легкостью делиться кодом, заметками и ресурсами. Это отличный способ поддерживать единый источник знаний и улучшать совместную работу между разработчиками и командами DevOps.
- Передача знаний от разработчиков к DevOps и SRE командам: С помощью Jupyter Notebooks можно создавать документацию и интерактивные руководства, которые помогают в передаче знаний от команды разработчиков к командам DevOps и SRE. Это упрощает процесс передачи знаний и помогает обеспечить гладкий переход от разработки к поддержке и управлению приложениями.
Согласитесь, что значительно веселее не просто прочитать кусок документации, а еще и прямо в ней запустить код и получить результат!
Jupyter Notebooks – это не просто инструмент, это мост между разработкой, DevOps и SRE, который помогает обеспечить бесшовное взаимодействие и обмен знаниями в вашей команде. И все это в интерактивном, легко доступном и дружелюбном формате, который облегчает жизнь каждому из участников процесса. А теперь, давайте углубимся в детали и узнаем, как все это работает на практике!
Как это работает
Все относительно просто. Мы используем .NET Interactive. Проект дает возможность использовать такие языки как C# и F# напрямую в консоли (REPL). Кроме того он предоставляет ядро Jupyter, и на основе него Polyglot Notebooks, по-сути возможность исполнять в одном ноутбуке код на разных языках.
В ноутбуке можно создавать ячейки с текстом, в формате маркдайун и ячейки с кодом, на одном из языков, поддерживаемых ядром. Ячейки с кодом, очевидно, можно исполнять прямо в ноутбуке, и получать результат. Результат сохраняется в ноутбуке, как часть ipynb
файла, и таким образом можно делиться результатами работы вашего кода, вместе с документацией и самим кодом.
Как этим пользоваться
В прошлом видео мы
говорили о том, как настроить VSCode для работы с Jupyter. В этот раз мы поговорим о том, как создать ноутбук, которым можно поделиться с теми, у кого нет VSCode.
А как быть в случаях, если ваш ноутбук использует инструменты, которые могут быть не установлены у вашей аудитории. А вдруг и VSCode у них нет?
Для этого мы будем использовать Binder. Это проект, который помогает превратить ваш репозиторий с ноутбуками в Docker контейнер, и запустить его онлайн. Вы даже можете подготовить свой Docker файл, с нужными вам ядрами, скриптами, инструментами. Если положить его в корень репозитория, то Binder соберет на его основе образ, и запустит его. Пример такого файла можно найти тут. В документации к Binder указано, что Docker рекомендуется использовать только в обычных случаях. У меня как раз такой случай, я использую ядро, которое не идет по-умолчанию, и мне нужно было установить некоторые дополнительные инструменты, как minizinc
. Этот Dockerfile создает образ Docker для среды, основанной на Jupyter Notebook, с дополнительными установками и конфигурациями. Вот краткое разъяснение каждого этапа в этом Dockerfile:
- Многопроходная сборка:
- Используется многопроходная сборка Docker с двумя базовыми образами:
minizinc/minizinc
иjupyter/base-notebook:ubuntu-20.04
. - Команды
COPY --from=composer
копируют файлы из первого этапа сборки (composer
) во второй этап сборки (builder
).
- Используется многопроходная сборка Docker с двумя базовыми образами:
- Установка зависимостей для .NET CLI:
- Задаются аргументы и переменные среды для последующих команд.
- Устанавливаются необходимые зависимости, включая
curl
, и другие библиотеки, необходимые для работы .NET Core SDK.
- Установка .NET Core SDK:
- Используется скрипт
dotnet-install.sh
для установки .NET Core SDK. - Создается символическая ссылка на исполняемый файл
dotnet
.
- Используется скрипт
- Добавление источников пакетов NuGet:
- Создается файл
NuGet.config
с настроенными источниками пакетов NuGet.
- Создается файл
- Установка
nteract_on_jupyter
:- Устанавливается
nteract_on_jupyter
через pip.
- Устанавливается
- Установка Microsoft.DotNet.Interactive:
- Устанавливается инструмент
Microsoft.DotNet.Interactive
через .NET CLI. - Затем устанавливаются спецификации ядра для Jupyter через
dotnet interactive jupyter install
.
- Устанавливается инструмент
- Обновление прав:
- Обновляются права на файлы и каталоги, чтобы убедиться, что они принадлежат пользователю
jovyan
.
- Обновляются права на файлы и каталоги, чтобы убедиться, что они принадлежат пользователю
- Установка рабочего каталога и копирование ноутбуков:
- Устанавливается рабочий каталог на
${HOME}/notebooks/
. - Копируются ноутбуки в рабочий каталог.
- Устанавливается рабочий каталог на
После того как этот файл создан и лежит в корне репозитория, Binder-у можно указать на этот репозиторий. Он склонирует его и попытается собрать образ на основе этого файла.
Если все пройдет удачно, он загрузит его в container registry и запустит. В итоге ваш код и ваши ноутбуки станут доступны публично.