# Jupyter

> Экосистема интерактивных блокнотов — документов из ячеек с кодом, результатами, графиками и текстом; стандартный инструмент анализа данных, ML-экспериментов и обучения.

Источник: https://llmdocs.ru/wiki/jupyter/ · обновлено 2026-11-09 · лицензия CC BY-SA 4.0

- **Название**: от 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](https://llmdocs.ru/wiki/markdown.md). Блокноты стали стандартным инструментом анализа данных, экспериментов в [машинном обучении](https://llmdocs.ru/wiki/machine-learning.md), научных расчётов и обучения программированию.[1]

## История

В 2001 году Фернандо Перес создал **IPython** — улучшенную интерактивную оболочку [Python](https://llmdocs.ru/wiki/python.md). В 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](https://llmdocs.ru/wiki/kubernetes.md).

## Формат .ipynb

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

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

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

```bash
uv add --dev jupyterlab ipykernel
uv run jupyter lab
```

Чтобы блокнот видел пакеты нужного [виртуального окружения](https://llmdocs.ru/wiki/venv.md), в нём регистрируют ядро:

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

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

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

Последнее выражение ячейки выводится автоматически; таблицы [pandas](https://llmdocs.ru/wiki/pandas.md) отображаются в HTML, графики matplotlib и plotly — прямо под ячейкой.

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

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

Практики:

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

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

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

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

- **Google Colab** и **Kaggle Notebooks** — бесплатные облачные блокноты с GPU.
- **marimo** — реактивные блокноты в виде `.py`-файлов, где зависимые ячейки пересчитываются автоматически, что решает проблему скрытого состояния.
- **Quarto** — публикация блокнотов как статей, книг и сайтов.
- Интеграции с [LLM](https://llmdocs.ru/wiki/llm.md) — Jupyter AI, ассистенты в Colab и VS Code.

В [MLOps](https://llmdocs.ru/wiki/mlops.md) блокноты обычно используют для исследования, а обучение и сервинг моделей переносят в обычный код и пайплайны.

## См. также

- [pandas](https://llmdocs.ru/wiki/pandas.md)
- [NumPy](https://llmdocs.ru/wiki/numpy.md)
- [MLflow](https://llmdocs.ru/wiki/mlflow.md)
- [Python](https://llmdocs.ru/wiki/python.md)

## Источники

1. [Project Jupyter documentation](https://docs.jupyter.org/)
2. [JupyterLab documentation](https://jupyterlab.readthedocs.io/)
3. [The Jupyter Notebook Format (nbformat)](https://nbformat.readthedocs.io/en/latest/format_description.html)
4. [Jupyter — Kernels (programming languages)](https://docs.jupyter.org/en/latest/projects/kernels.html)
5. [Jupytext documentation](https://jupytext.readthedocs.io/)
6. [Pimentel et al. — A Large-scale Study about Quality and Reproducibility of Jupyter Notebooks (MSR 2019)](https://doi.org/10.1109/MSR.2019.00077)
7. [Jupyter Server — Security](https://jupyter-server.readthedocs.io/en/latest/operators/security.html)
