Jupyter

Материал из llmdocs — справочник разработчика
Портал: Python
Jupyter
Названиеот Julia, Python и R
ПредшественникIPython Notebook (2011)
Выделение в Project Jupyter2014
Формат файла.ipynb (JSON)
ИнтерфейсыJupyterLab, Jupyter Notebook 7, VS Code, Google Colab, Kaggle
ЯдраIPython (Python) и более 100 других языков
ЛицензияBSD-3-Clause

Jupyter — открытая экосистема для интерактивных вычислений, центральное понятие которой — блокнот (notebook): документ из последовательности ячеек с кодом, результатами его выполнения (таблицами, графиками, изображениями) и текстом в Markdown. Блокноты стали стандартным инструментом анализа данных, экспериментов в машинном обучении, научных расчётов и обучения программированию.[1]

История

В 2001 году Фернандо Перес создал IPython — улучшенную интерактивную оболочку Python. В 2011 году к ней добавился веб-интерфейс IPython Notebook. Поскольку архитектура позволяла подключать и другие языки, в 2014 году языконезависимые части выделили в Project Jupyter; название составлено из трёх первых поддерживаемых языков — Julia, Python и R — и отсылает к записям Галилея о спутниках Юпитера. В 2017 году проект получил премию ACM Software System Award.

Архитектура

  • Фронтенд — интерфейс в браузере или редакторе: JupyterLab (основная среда с вкладками, файловым менеджером и терминалом), классический Jupyter Notebook (с версии 7 построен на компонентах JupyterLab), а также VS Code, PyCharm, Google Colab и Kaggle Notebooks.[2]
  • Ядро (kernel) — отдельный процесс, который выполняет код и хранит состояние: переменные, импорты, загруженные данные. Стандартное ядро — IPython; существуют ядра для R, Julia, Go, Rust, JavaScript, SQL и более сотни других языков.[4]
  • Сервер (Jupyter Server) соединяет фронтенд и ядра по протоколу обмена сообщениями поверх ZeroMQ и WebSocket.
  • JupyterHub — многопользовательский вариант для команд и учебных курсов: каждый пользователь получает свой сервер, в том числе в Kubernetes.

Формат .ipynb

Блокнот хранится в файле .ipynb — это JSON со списком ячеек, их исходным кодом, результатами выполнения (включая картинки в base64) и метаданными ядра.[3] Отсюда типичные неудобства: огромные диффы в Git, конфликты слияния, «тяжёлые» файлы. Помогают:

  • nbstripout — очистка результатов перед коммитом;
  • Jupytext — синхронизация блокнота с обычным .py или .md файлом, который удобно ревьюить;[5]
  • nbdime — дифф и слияние с пониманием структуры блокнота.

Работа с блокнотом

uv add --dev jupyterlab ipykernel
uv run jupyter lab

Чтобы блокнот видел пакеты нужного виртуального окружения, в нём регистрируют ядро:

uv run python -m ipykernel install --user --name myproject

IPython добавляет к Python «магические команды»:

%timeit sorted(data)          # замер времени
%load_ext autoreload
%autoreload 2                 # перезагрузка изменённых модулей
%%sql                         # ячейка на SQL (расширение jupysql)
!pip list | head              # команда оболочки

Последнее выражение ячейки выводится автоматически; таблицы pandas отображаются в HTML, графики matplotlib и plotly — прямо под ячейкой.

Проблемы воспроизводимости

Ячейки можно выполнять в любом порядке, а состояние ядра сохраняется между ними. Поэтому блокнот, который «работал вчера», может не работать при запуске сверху вниз: переменная была определена в удалённой ячейке или код перезапускался в другом порядке. Исследование 1,4 млн блокнотов с GitHub показало, что лишь около четверти из них выполняются без ошибок, а повторное выполнение дало тот же результат лишь у 4 %.[6]

Практики:

  • перед коммитом — «Restart Kernel and Run All»;
  • фиксировать зависимости (pyproject.toml, lock-файл);
  • выносить повторно используемый код в модули и импортировать его;
  • параметризовать и запускать блокноты как задачи через papermill, превращать в отчёты через nbconvert или Quarto.

Безопасность

Jupyter-сервер даёт полный доступ к выполнению кода на машине. Его нельзя открывать в интернет без пароля или токена; по умолчанию сервер слушает localhost и генерирует токен.[7] Для удалённой работы безопаснее проброс порта через SSH (ssh -L 8888:localhost:8888 server). Открывать чужие блокноты тоже нужно с осторожностью: выполнение ячеек — это запуск чужого кода.

Альтернативы и развитие

  • Google Colab и Kaggle Notebooks — бесплатные облачные блокноты с GPU.
  • marimo — реактивные блокноты в виде .py-файлов, где зависимые ячейки пересчитываются автоматически, что решает проблему скрытого состояния.
  • Quarto — публикация блокнотов как статей, книг и сайтов.
  • Интеграции с LLM — Jupyter AI, ассистенты в Colab и VS Code.

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

См. также

Источники

  1. Project Jupyter documentation
  2. JupyterLab documentation
  3. The Jupyter Notebook Format (nbformat)
  4. Jupyter — Kernels (programming languages)
  5. Jupytext documentation
  6. Pimentel et al. — A Large-scale Study about Quality and Reproducibility of Jupyter Notebooks (MSR 2019)
  7. Jupyter Server — Security