Блокноты. Jupyter Notebooks
Contents
Блокноты. 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
.
Второй способ опирается на использование 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-му порту локальной машины.
Если автоматически в браузере ничего не открылось, то можно скопировать этот адрес в адресную строку вашего браузера.
Содержимое приветственного окна называется Jupyter dashboard
. Здесь можно осуществлять навигацию по файловой системе, открывать уже существующие блокноты jupyter
или создавать новые.
Выше приводится скриншот того, как выглядит это окно в моём случае. Так как я открыл его в папке с приличным количеством уже существующих блокнотов, то в списке перечислено огромное количество файлов с расширением “.ipynb
”. Это расширение и соответствует блокнотам jupyter
и открыть любой из них можно обычным двойным нажатием на него в jupyter dashboard
.
Если вы запустили jupyter
впервые, то в этом списке не должно быть уже существующих блокнотов jupyter
. Тогда для дальнейшего изучения вам потребуется создать новый блокнот. Для этого нажмите New
в правом верхнем углу и в выпавшем списке выберите Python 3
.
Структура блокнота#
После создания нового блокнота должна открыться новая вкладка.
На рисунке выше приведен приблизительный вид этой вкладки, а ниже — расшифровка основных элементов интерфейса.
Заголовок блокнота, он же — название файла с расширением “
.ipynb
”. По умолчанию генерируется название “Untitled
”, но его можно изменить.Панель управления блокнотом.
Статус ядра
python
.Ячейки блокнота.
Ячейки блокнота. Cells
#
Исходный код python
набирается внутри ячеек (Cell
) блокнотов, внутри каждой из которых может быть одна или несколько строк кода. Внутри одного блокнота может быть сколько угодно ячеек и код запускается сразу ячейками. Если код в ячейке генерирует какой-то вывод, то этот вывод встраивается прямиком под этой ячейкой.
Вообще говоря, бывает два типа ячеек:
Ячейки с исходным кодом, про которые речь шла выше.
Ячейки с текстовым наполнением на языке разметки 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()
А вот так оно выглядело в оригинале.
Командный режим и режим редактирования#
Во время работы с блокнотами jupyter
вы можете находиться в одном из двух режимов: режим редактирования и командный режим. В режиме редактирования вы как бы находитесь на уровне одной конкретной ячейки, а в командном — на уровне всего блокнота.
В режиме редактирования активная ячейка выделяется зеленной рамкой. Внутри ячейки мигает курсор, и набираемый на клавиатуре текст попадает прямиком в содержимое ячейки.
В командном режиме активная ячейка выделяется синей рамкой. Внутри ячейки отсутствует курсор и нажимаемые клавиши интерпретируются в качестве команд, а не набираемого текста.
Чтобы перейти из командного режима в режим редактирования необходимо нажать клавишу 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
не является полноценной заменой обычным блокнотам. Ниже приведены основные ограничения.
Так как блокнот
jupyter
запущен на сервере, то и файловая система используется из него. Это значит, что если вам требуется работать с вашими файлами, то необходимо в явном виде загружать их на выделенный серверОтсутствует полный доступ к кастомизации рабочего пространства. На серверах
google
установленно большинство необходимых для ученого библиотек и инструментов, установить дополнительные библиотеки обычно можно почти без проблем. Но все же полный контроль получить не удастся и, например, невозможно поменять установленную версиюpython
и т.д.Чтобы работать в
google colab
необходимо подключение к интернету. Кроме этого в бесплатной версии требуется проявлять регулярную активность, чтобыgoogle
не сбросил вашу сессию. Т.е. если вы запустили продолжительные расчеты, то вы не можете на долго отойти от машины.
Note
В верхней части этого ресурса можно найти кнопку, которая открывает использованный для генерации данной страницы блокнот jupyter
в google colab
.