Урок курса
Магические команды 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), но они делают работу более удобной. Со временем вы запомните основные.
Продолжить с проверкой и прогрессом
Откройте интерактивный раннер с заданиями урока.
