Errors
JupyterHub

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-образ, протестируй и дай инструкцию пользователям. Остальное — уже их ответственность за коммиты.