JupyterHub: Is there a way to integrate git with Jupyter and have a version control over the notebooks created?
Ты развернул JupyterHub, запустил пользователей, и теперь они спрашивают: «а как нам с гитом работать?». Ручное сохранение ноутбуков, копирование в репозитории
Ты развернул JupyterHub, запустил пользователей, и теперь они спрашивают: «а как нам с гитом работать?». Ручное сохранение ноутбуков, копирование в репозитории — это же каменный век. Хочется, чтобы всё было как у больших: коммит, пуш, история изменений прямо из интерфейса.
Проблема знакомая. Сам JupyterHub — это просто шлюз, менеджер сессий. А вот среда, в которой работают пользователи (JupyterLab или классический Notebook), уже может дружить с гитом через расширения.
Git внутри JupyterLab
Стандартный и самый прямой путь — использовать JupyterLab. В его экосистеме есть jupyterlab-git — расширение, которое ставится как pip-пакет.
После установки в интерфейсе появляется иконка гита на левой панели. Пользователи могут клонировать репозитории, делать коммиты, пушить, смотреть diff — почти как в IDE. Всё это работает в рамках их пользовательской сессии.
Но тут есть нюанс. Если ты развернул JupyterHub, то просто так pip install jupyterlab-git в своей среде не сработает для всех пользователей. Расширение должно быть предустановлено в образе, на котором запускаются серверы пользователей (single-user servers).
Вот пример фрагмента Dockerfile для твоего образа:
FROM jupyterhub/singleuser:latest
RUN pip install jupyterlab-git
После пересборки образа и обновления конфига JupyterHub у всех пользователей в JupyterLab появится интерфейс гита.
А что с diff для ноутбуков?
Ноутбук — это JSON. Смотреть diff обычного текста не очень удобно. Для этого есть nbdime — инструмент, который умеет показывать различия в ноутбуках в человекочитаемом виде.
Его тоже можно интегрировать. Установи пакет и активируй интеграцию с JupyterLab:
pip install nbdime
nbdime extensions --enable --sys-prefix
После этого jupyterlab-git будет использовать nbdime для отображения изменений в ячейках, что гораздо нагляднее.
Классический Notebook и прочие оболочки
Если пользователи работают в классическом Jupyter Notebook, то варианты есть, но они менее удобные. Существуют расширения вроде jupyter-notebook-git, но они часто требуют больше танцев с бубном и могут отставать по функциональности.
Логичный совет — мигрировать пользователей на JupyterLab. Это более современная и расширяемая среда.
Контроль и настройка
Как админ, ты можешь предварительно настроить гит для пользователей. Например, прописать в общем конфиге .gitconfig базовые настройки пользователя и email. Или заранее заклонить в домашние директории нужные репозитории-заготовки.
Главное — помнить, что JupyterHub лишь предоставляет среду. Всё, что касается инструментов работы внутри неё (включая гит), должно быть установлено и сконфигурировано в самом образе пользовательского сервера.
Так что план такой: определись со средой (JupyterLab), добавь нужные пакеты в Docker-образ, протестируй и дай инструкцию пользователям. Остальное — уже их ответственность за коммиты.