Pull to refresh

Jupyter-Ascending — новый способ работы с Jupyter Ноутбуками в Emacs

Level of difficultyMedium
Reading time4 min
Views817
Original author: Duncan Britt

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
Использование с Python
Работа с Markdown
Работа с Markdown
Запуск сессии
Запуск сессии

Основные возможности

  • Синхронизация: любые изменения и сохранения в 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:

  1. Нажмите M-x (Alt + x)

  2. Введите: package-install

  3. 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 в браузере.

Рекомендуемые горячие клавиши:

Команда

Описание

jupyter-ascending-execute-line

Выполнить текущую ячейку

jupyter-ascending-execute-all

Выполнить все ячейки

jupyter-ascending-next-cell

Перейти к следующей ячейке или создать новую

jupyter-ascending-previous-cell

Вернуться к предыдущей ячейке

jupyter-ascending-edit-markdown-cell

Редактировать Markdown-ячейку в отдельном буфере

jupyter-ascending-cycle-cell-type

Переключить тип ячейки (Код / 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 показался отличной альтернативой.

Tags:
Hubs:
+3
Comments2

Articles