Урок курса
Магические команды IPython: обзор
Jupyter Notebook с нуля: бесплатный курсЧто такое «магические» команды
В Jupyter Notebook за исполнение кода отвечает IPython – интерактивная оболочка для Python. IPython расширяет стандартные возможности языка, предоставляя магические команды (magic commands) – специальные инструкции, начинающиеся с % (линейные магии) или %% (ячейчные магии).
Магические команды предназначены для решения вспомогательных задач: управление средой, измерение времени, вызов системных команд и т.д., без выхода из ноутбука. Они не являются частью Python-синтаксиса – IPython перехватывает строки, начинающиеся с %, и выполняет особым образом.
Примеры:
-
%pwd– показывает текущий рабочий каталог (от англ. "print working directory"). Аналог командыpwdв Linux/cdв Windows, но вывод прямо в ноутбуке. -
%ls– выводит список файлов в текущей директории (в Windows фактически выполняетdir). Можно указать путь:%ls ./data/покажет содержимое папки data. -
%matplotlib inline– мы использовали ранее, настраивает бэкенд matplotlib. -
%timeit– измеряет время выполнения выражения (многократно, для оценки производительности). -
%%bash– выполнит всю ячейку как скрипт Bash (полезно, если надо запустить несколько команд shell). -
%load filename.py– загрузит содержимое внешнего .py файла в текущую ячейку. -
%store переменная– сохранит значение переменной, чтобы потом восстановить даже после перезапуска kernel (простое межсеансовое хранение). -
И так далее.
Получить список всех магических команд: %lsmagic. Тогда вы увидите перечень Available line magics и Available cell magics. Также можно читать документацию: добавив ? после магии, например %time? покажет справку.
Некоторые полезные магические команды
Рассмотрим более систематически ряд магий и их применение:
-
Навигация и файлы:
-
%pwd– текущая директория. -
%ls– содержимое директории. (%ls -lдаст подробный список, какls -lв Linux). -
%cd new_dir– сменить текущий каталог наnew_dir. В ноутбуке это влияет, куда будут сохраняться/искаться файлы.%cd ..– на уровень вверх. -
%mkdir new_folder– создать новую папку (эквивалент shell-команды mkdir). -
%rm file.csv– удалить файл (но будьте осторожны, безвозвратно).
-
-
Информация об окружении:
-
%who– покажет список всех переменных, определённых в текущем пространстве (типы не указывает, просто имена). -
%whos– более подробный вывод: имена, типы, краткое представление значений (например, для массивов – размер). -
%env– показать переменные окружения (OS environment variables). Можно использовать%env VAR=valueдля установки, и$$VARв коде для подстановки (илиos.environ).
-
-
Запуск внешнего кода:
-
%run script.py– выполнит Python-скриптscript.pyкак будто вы его запустили отдельным процессом, но в том же kernel. После выполнения в вашем ноутбуке будут доступны переменные и функции из этого скрипта. -
%load script.py– просто загрузит текст файлаscript.pyв ячейку. Удобно, чтобы быстро перенести код в ноутбук для выполнения или редактирования. -
%%bash– (ячейчная магия) позволяет написать несколько строк команд Bash. Например:%%bash echo "Список файлов:" ls -lВывод этой ячейки будет результатом выполнения этих bash-команд.
-
Другие ячейчные магии:
%%bash,%%sh– аналогично bash,%%time– засечь время выполнения всей ячейки,%%HTML– отобразить содержимое ячейки как HTML,%%latex– как LaTeX,%%writefile file.py– сохранить содержимое ячейки в файл.
-
-
Измерение производительности:
-
%time– замерить время выполнения одного выражения. -
%timeit– замерить время выполнения с высокой точностью, выполняя код многократно (см. урок 5.2). -
%%time/%%timeit– применимо к целой ячейке.
-
-
Отладка и профилирование:
-
%debug– войти в интерактивный режим отладки после исключения (подробнее в уроке 5.3). -
%pdb– включить/выключить автодоводчик при ошибках. -
%prun– выполнить выражение с профилированием (сбором статистики по времени работы функций). -
%lprun– профилировать отдельную функцию построчно (требуетline_profiler). -
%memit/%%memit– оценить потребление памяти (требуетmemory_profiler).
-
-
Прочие:
-
%reset– сбросить пространство имен (удалить все определённые переменные/функции). Без аргументов попросит подтверждение;%reset -f– без подтверждения. Полезно, чтобы очистить среду, не перезапуская kernel. -
%reset_selective varprefix– удалить переменные, имена которых начинаются сvarprefix(тоже с -f). -
%history– показать историю выполненных команд (можно ограничить количество, использовать-nчтобы с номерами ячеек). -
%autoreload– магия для автоматической перезагрузки модулей:%load_ext autoreload+%autoreload 2позволяет автоматически перезагружать модули, если их код в файлах изменился (полезно при разработке библиотек вместе с ноутбуком).
-
Эти магии значительно облегчают жизнь. Например, %whos часто выручает, чтобы быстро посмотреть, какие переменные у вас есть и не совершить опечатку в имени. %cd и %ls позволяют работать с файлами, не переходя в терминал. %run – разбивать проект на ноутбук и внешние .py файлы, комбинируя интерактивность с организованным кодом.
Примеры использования магических команд
Попробуем несколько магий в действии:
# Навигация
%pwd # вывести текущую директорию
%ls # показать файлы
%cd data/ # перейти в папку data
%ls # показать содержимое data
%cd .. # вернуться назад
# Работа с переменными
a = 10
b = [1, 2, 3]
%who # покажет: a, b
%whos # покажет детальную информацию о a и b
# Измерение времени
%time sum(range(1000000))
%timeit [x*x for x in range(1000)]
# Сохраним переменную между сессиями
long_list = list(range(10000))
%store long_list
Объяснения:
-
%pwdмы применили внутриprint– да, магию можно вставить как выражение, обернув в(). Это фишка IPython:%pwdвозвращает строку текущей директории, и мы напечатали её. Затем%lsвыдал список файлов,%cd data/вошли в папку data (покажет новый путь), ещё раз%ls– уже в папке data.%cd ..– обратно. -
%whoнапечаталa b.%whosдал что-то вроде:Variable Type Data/Info ----------------------------- a int 10 b list list of length 3
-
%timeсуммировал миллион чисел и вывел, например:CPU times: user 12 ms, sys: 0 ns, total: 12 ms Wall time: 11.9 ms
А
%timeitдля списка квадратов покажет, например:1000 loops, best of 5: 189 µs per loop
(то есть ~0.000189 секунды на выполнение списка квадратов от 0 до 999).
-
%store long_listсохранитlong_list. Теперь даже если вы перезапустите kernel, вы можете выполнить%store -r long_listи восстановить переменную (особенно актуально для долгих расчётов, чтобы не пересчитывать).
Обратите внимание: магические команды – это инструмент опытного пользователя, они не обязательны. Можно обойтись и без них (выполняя команды через ! или функции Python), но они делают работу более удобной. Со временем вы запомните основные.
Выбор между %time и %timeit
Для одной операции %time показывает длительность конкретного исполнения. %timeit повторяет вычисление и оценивает время нескольких прогонов. Это удобнее для короткого выражения, но повторное исполнение должно быть допустимым. Не измеряйте так отправку платежа или запись сообщения во внешний сервис.
Для самопроверки сравните создание списка квадратов и создание генератора. Если во втором случае не потребить генератор, вы измерите создание объекта вместо вычисления всех квадратов. Сравниваемые фрагменты должны выполнять одинаковый объём работы и возвращать сопоставимый результат.
В отчёте укажите размер входа, состояние окружения и операцию. Первый запуск может включать импорт или прогрев, а последующие — использовать кеш. Ускорение маленького фрагмента не означает ускорения всего ноутбука. Если код существенно меняет состояние, подготовьте независимый вход для каждого повторения.
Продолжите разбор: Отладка и обработка ошибок в ноутбуке.
Продолжить с сохранением прогресса
Перейдите к уроку в учебном кабинете.
