05 мая 2025 года Duncan Britt публиковал статью о том, как можно работать с Jupyter ноутбуками в Emacs. Он создал пакет Jupyter-Ascending , чтобы упростить редактирование и выполнение Python кода в Jupyter-ноутбуках напрямую из Emacs.
Оригинал статьи можно найти на сайте автора:
https://duncanbritt.com/blog/jupyter-ascending/jupyter-ascending.html
Главным образом, jupyter-ascending использует Jupytext и Jupyter Ascending.
Инструменты пакета предоставляют следующие возможности:
отображение
.ipynb
-файлов как обычного Python-кода,синхронизация содержимого двух файлов,
выполнение кода в Jupyter-ноутбуке.
Как это выглядит на практике



Основные возможности
Синхронизация: любые изменения и сохранения в Python-файле мгновенно отражаются в соответствующем Jupyter-ноутбуке.
Выполнение ячеек: запуск отдельных ячеек или всего ноутбука.
Навигация: переход между ячейками с помощью простых команд.
Управление ячейками: создание новых ячеек, переключение между кодом и Markdown.
Поддержка Markdown:
редактирование в отдельных буферах (аналогично специальному режиму Org mode),
автоматическая вставка комментариев при нажатии Enter в Markdown-ячейках.
Утилиты настройки: команды для запуска Jupyter и создания синхронизированных пар файлов.
Установка
1. Зависимости
Перед установкой пакета убедитесь, что установлены все необходимые зависимости.
Если Jupyter ещё не установлен:
pip install notebook
Затем установите Jupyter Ascending:
pip install jupyter_ascending &&
python3 -m jupyter nbextension install jupyter_ascending --sys-prefix --py && \
python3 -m jupyter nbextension enable jupyter_ascending --sys-prefix --py && \
python3 -m jupyter serverextension enable jupyter_ascending --sys-prefix --py
Обычно установка Jupyter Ascending автоматически устанавливает jupytext, но если этого не произошло:
pip install jupytext
Переходим к установке в Emacs
Jupyter Ascending доступен через MELPA
Чтобы установить этот пакет в Emacs, выполните следующие шаги:
1. Подключите репозиторий MELPA
Добавьте следующие строки в файл конфигурации~/.emacs
или ~/.emacs.d/init.el
:
(require 'package)
;; Добавление репозиториев
(setq package-archives
'(("melpa" . "https://melpa.org/packages/")
("gnu" . "https://elpa.gnu.org/packages/")))
(package-initialize)
;; Обновляем список пакетов при необходимости
(unless package-archive-contents
(package-refresh-contents))
2. Установить jupyter-ascending
В файл конфигурации emacs (~/.emacsили
~/.emacs.d/init.el`) добавьте:
(unless (package-installed-p 'jupyter-ascending)
(package-install 'jupyter-ascending))
В качестве альтернативы Вы также можете установить пакет вручную через M-x
:
Нажмите
M-x
(Alt + x)Введите:
package-install
Emacs спросит название пакета — введите
jupyter-ascending
, и нажмитеEnter
3. Проверка установки
После установки вы можете проверить, работает ли пакет, например, выполнив:
(require 'jupyter-ascending)
Конфигурация
Пример настройки с использованием use-package
, где:
назначаются горячие клавиши для часто используемых команд,
режим активируется для файлов с суффиксом
.sync.py
.
(use-package jupyter-ascending
:ensure t
:hook (python-mode . (lambda ()
(when (and buffer-file-name
(string-match-p "\\.sync\\.py\\'" buffer-file-name))
(jupyter-ascending-mode 1))))
:bind (:map jupyter-ascending-mode-map
("C-c C-k" . jupyter-ascending-execute-line)
("C-c C-a" . jupyter-ascending-execute-all)
("C-c C-n" . jupyter-ascending-next-cell)
("C-c C-p" . jupyter-ascending-previous-cell)
("C-c t" . jupyter-ascending-cycle-cell-type)
("C-c '" . jupyter-ascending-edit-markdown-cell)))
Как работать с пакетом Jupyter Ascending
Создать пару синхронизированных файлов:
M-x jupyter-ascending-create-notebook-pair RET example RET
или в терминале:
python3 -m jupyter_ascending.scripts.make_pair --base example
Это создаст два файла: example.sync.py
и example.sync.ipynb
.
Если у вас уже есть Jupyter-ноутбук, создайте из него Python-файл:
M-x jupyter-ascending-convert-notebook RET example.ipynb RET
или в терминале:
jupytext --to py:percent example.ipynb
Затем добавьте суффикс .sync
к обоим файлам.
Чтобы запустить Jupyter и открыть ноутбук:
Откройте
example.sync.py
в EmacsВыполните:
M-x jupyter-ascending-start-notebook
или в терминале:
python3 -m jupyter notebook example.sync.ipynb
Внутри Python-файла каждая ячейка начинается с # %%
.
# %% [markdown]
# Это ячейка Markdown.
# Ниже — ячейка с кодом.
# %%
def g(x):
return 3 * x
При редактировании и сохранении .py
-файла вы сразу увидите изменения в Jupyter в браузере.
Рекомендуемые горячие клавиши:
Команда | Описание |
---|---|
| Выполнить текущую ячейку |
| Выполнить все ячейки |
| Перейти к следующей ячейке или создать новую |
| Вернуться к предыдущей ячейке |
| Редактировать Markdown-ячейку в отдельном буфере |
| Переключить тип ячейки (Код / Markdown) |
Ограничения
Пакет работает только с Python-ноутбуками, поскольку Jupyter Ascending поддерживает исключительно Python. Подробнее:
https://github.com/imbue-ai/jupyter_ascending/issues/25
Альтернативы
Хороший обзор других решений для работы с Jupyter из Emacs можно найти в блоге 2023 года. В нём рассматриваются emacs-jupyter и ein.
Заключение
Этот пакет был создан, потому что в Data Science широко используют Jupyter-ноутбуки. Конечно, Org-mode был бы еще лучше, но увы. Jupyter-ascending позволяет работать с ноутбуками как с обычными Python-файлами, не запуская Jupyter. Конечно, есть и другие Emacs-пакеты для Jupyter, которые не ограничиваются только Python, но Jupyter Ascending показался отличной альтернативой.