Блокноты. Jupyter Notebooks#

Блокноты Jupyter — ещё один способ взаимодействия с python, который с одной стороны позволяет в интерактивном режиме передавать команды интерпретатору python, а с другой стороны сохранять и переиспользовать исходный код. Кроме этого в блокноты можно встраивать дополнительный контент, такой как картинки, графики, видео, таблицы, текст, формулы \(\LaTeX\), таблицы и многое другое. В частности, материалы этого ресурса (в том числе и эта страничка) по большей части представляют собой блокноты jupyter конвертированные в html.

Благодаря всем перечисленным выше особенностям, блокноты Jupyter стали очень популярными в научной среде.

Проекты IPython и Jupyter#

Jupyter — проект, занимающийся разработкой программного обеспечения для интерактивного взаимодействия со многими, но прежде всего популярными в науке языками программирования. Образовался jupyter как продолжение проекта IPython, который изначально преследовал все те же цели, но в отношении именно python. Со временем IPython ценной небольших усилий приложил свои разработки к другим популярным в науке языкам программирования, таким как Julia и R, что привело к замешательству в среде разработчиков на новых языках: почему я программирую на (например) Julia, а пользуюсь инструментом, в названии которого присутствует совершенно другой язык программирования python? В результате было принято решение перенести из IPython все мультиязычные решения в отдельный проект, который назвали в честь вышеупомянутой троицы языков (Julia python r).

Интерактивная оболочка IPython#

Сегодня IPython по большей части служит как ядро для проектов jupyter, но полезно знать про усовершенствованную интерактивную оболочку для python, которая запускается следующей командой.

ipython

Преимущества интерактивной оболочки IPython над обычной — подсветка синтаксиса, автоматическое дополнение команд и ряд других удобств.

Установка и запуск Jupyter#

Anaconda#

Если вы установили дистрибутив Anaconda, то Jupyter автоматически установился вместе с ним. Запустить Jupyter блокноты теперь можно минимум двумя способами. Первый из них задействует графический интерфейс — инструмент Anaconda Navigator, внутри которого на домашней странице можно непосредственно запустить блокнот jupyter.

../../_images/anaconda_navigator.png

Второй способ опирается на использование Anaconda Prompt, в котором требуется набрать следующую команду.

jupyter notebook

CPython и PyPI#

Если вы установили голый CPython, то инструменты jupyter придется установить вручную. Для этого удобнее всего в командной строке набрать следующую команду.

python -m pip install jupyterlab

Запустить блокнот jupyter можно следующей командой в командной строке.

jupyter notebook

Jupyter dashboard#

Когда вы набрали команду jupyter notebook в командной строке, Anaconda Prompt или нажали на соответствующую иконку в Anaconda Navigator, должен открыться браузер с приветственной страницей блокнотов jupyter.

Note

Во время запуска jupyter вы можете увидеть в консоли много отладочной информации, среди которой можно вычленить адрес сессии на локальной машине вида “localhost:8888”. Это означает, что Jupyter слушает команды по 8888-му порту локальной машины.

Если автоматически в браузере ничего не открылось, то можно скопировать этот адрес в адресную строку вашего браузера.

../../_images/dashboard.png

Содержимое приветственного окна называется Jupyter dashboard. Здесь можно осуществлять навигацию по файловой системе, открывать уже существующие блокноты jupyter или создавать новые.

Выше приводится скриншот того, как выглядит это окно в моём случае. Так как я открыл его в папке с приличным количеством уже существующих блокнотов, то в списке перечислено огромное количество файлов с расширением “.ipynb”. Это расширение и соответствует блокнотам jupyter и открыть любой из них можно обычным двойным нажатием на него в jupyter dashboard.

Если вы запустили jupyter впервые, то в этом списке не должно быть уже существующих блокнотов jupyter. Тогда для дальнейшего изучения вам потребуется создать новый блокнот. Для этого нажмите New в правом верхнем углу и в выпавшем списке выберите Python 3.

Структура блокнота#

После создания нового блокнота должна открыться новая вкладка.

../../_images/notebook.png

На рисунке выше приведен приблизительный вид этой вкладки, а ниже — расшифровка основных элементов интерфейса.

  1. Заголовок блокнота, он же — название файла с расширением “.ipynb”. По умолчанию генерируется название “Untitled”, но его можно изменить.

  2. Панель управления блокнотом.

  3. Статус ядра python.

  4. Ячейки блокнота.

Ячейки блокнота. Cells#

Исходный код python набирается внутри ячеек (Cell) блокнотов, внутри каждой из которых может быть одна или несколько строк кода. Внутри одного блокнота может быть сколько угодно ячеек и код запускается сразу ячейками. Если код в ячейке генерирует какой-то вывод, то этот вывод встраивается прямиком под этой ячейкой.

Вообще говоря, бывает два типа ячеек:

  1. Ячейки с исходным кодом, про которые речь шла выше.

  2. Ячейки с текстовым наполнением на языке разметки markdown.

Все это в совокупности позволяет в одном месте (блокнот jupyter) помещать исходный код, генерируемый им вывод и сопровождать всё это текстовым описанием. Все страницы этого ресурса представляют собой конвертированные в html блокноты jupyter со слегка расширенным до sphinx языком разметки.

Note

Это в частности значит, что вы можете скачать оригинальный блокнот, из которого была сгенерирована текущая страница, с помощью кнопки на панели сверху.

Начиная с этого момента, большинство примеров с исходным кодом будут представлять из себя ячейки блокнотов jupyter. Первый из них ниже.

import matplotlib.pyplot as plt
import numpy as np

# Data for plotting
t = np.arange(0.0, 2.0, 0.01)
s = 1 + np.sin(2 * np.pi * t)

fig, ax = plt.subplots()
ax.plot(t, s)

ax.set(xlabel='time (s)', ylabel='voltage (mV)',
       title='About as simple as it gets, folks')
ax.grid()
../../_images/jupyter_1_0.png

А вот так оно выглядело в оригинале.

../../_images/cell.png

Командный режим и режим редактирования#

Во время работы с блокнотами jupyter вы можете находиться в одном из двух режимов: режим редактирования и командный режим. В режиме редактирования вы как бы находитесь на уровне одной конкретной ячейки, а в командном — на уровне всего блокнота.

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

../../_images/active_cell.png

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

../../_images/inactive_cell.png

Чтобы перейти из командного режима в режим редактирования необходимо нажать клавишу Enter или кликнуть мышкой внутри редактируемой области. Чтобы совершить обратный переход, необходимо нажать клавишу Esc или кликнуть мышкой снаружи ячейки.

Режим редактирования#

В режиме редактирования вы в основном набираете исходный код. Чтобы запустить код в активной ячейке, удобнее всего нажать сочетание клавиш Shift-Enter, но можно добраться и до пункта Cell \(\to\) Run Cells на панели управления мышкой.

Note

Запускать ячейки можно в любом порядке.

Командный режим#

В командном режиме вы как бы редактируете не содержимое ячейки, а сами ячейки. Например, двойное нажатие на клавишу “d” удаляет выделенную ячейку целиком.

Приведем здесь пару полезных горячих сочетаний клавиш.

Сочетание клавиш

Эффект

H

Показать горячие сочетания

Ctrl+S

Сохранить

dd

Удалить активную ячейку

z

Отменить удаление ячейки

b

Вставить ячейку ниже активной

a

Вставить ячейку выше активной

Shift+M

Объединить активную ячейку с ячейкой ниже

Ядро python#

Когда вы запускаете jupyter notebook открывается браузер, который является лишь интерфейсом (frontend) для запущенного на фоне jupyter. Для каждого отдельного блокнота jupyter (каждой вкладки) запускается отдельное изолированное ядро (kernel) python, которое по сути дела является интерпретатором python. Каждый раз, когда вы запускаете код в какой-то ячейке, jupyter отправляет код в этой ячейке ядру python, ждёт от него ответа и обрабатывает его.

С большинством ошибок jupyter справится самостоятельно и выведет соответствующее сообщение, но иногда могут возникнуть такие ошибки, при которых ядро перестанет отвечать. Например, такое может произойти из-за бесконечного цикла, бесконечной рекурсии, или, например, если ошибка возникла в сторонней библиотеке не на уровне языка python. Схожая ситуация может возникнуть и без формальной ошибки, например, если программа “съела” все доступные ресурсы машины.

В таких ситуациях полезно знать, что в пункте меню kernel ядро можно прерывать (interrupt), выключать (shut down) и перезапускать (restart).

Note

Перезапуск ядра также может пригодиться, для того чтобы начать сессию с чистого листа, т.е. освободить память от всех переменных, накопленных в результате предыдущих запусков ячеек.

Удаленная работа. Google Colab#

Jupyter вовсе не обязательно должен быть запущен на той же машине, с которой ей поступают команды. Нередко jupyter запускают на мощных серверах, а работают с ним удаленно. Такой подход позволяет как бы получать доступ к вычислительным мощностям удаленного сервера, например, со своего ноутбука.

Google Colab позволяет бесплатно запускать слегка доработанные jupyter блокноты на серверах google. Бесплатная версия предоставляет безлимитный по времени доступ к одной сессии в google colab и может оказаться очень полезным, если вычислительные мощности вашей машины не соответствуют современным стандартам.

Тем не менее google colab не является полноценной заменой обычным блокнотам. Ниже приведены основные ограничения.

  1. Так как блокнот jupyter запущен на сервере, то и файловая система используется из него. Это значит, что если вам требуется работать с вашими файлами, то необходимо в явном виде загружать их на выделенный сервер

  2. Отсутствует полный доступ к кастомизации рабочего пространства. На серверах google установленно большинство необходимых для ученого библиотек и инструментов, установить дополнительные библиотеки обычно можно почти без проблем. Но все же полный контроль получить не удастся и, например, невозможно поменять установленную версию python и т.д.

  3. Чтобы работать в google colab необходимо подключение к интернету. Кроме этого в бесплатной версии требуется проявлять регулярную активность, чтобы google не сбросил вашу сессию. Т.е. если вы запустили продолжительные расчеты, то вы не можете на долго отойти от машины.

Note

В верхней части этого ресурса можно найти кнопку, которая открывает использованный для генерации данной страницы блокнот jupyter в google colab.