Jupyter
| Название | от Julia, Python и R |
|---|---|
| Предшественник | IPython Notebook (2011) |
| Выделение в Project Jupyter | 2014 |
| Формат файла | .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 блокноты обычно используют для исследования, а обучение и сервинг моделей переносят в обычный код и пайплайны.