Урок курса

Магические команды 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 повторяет вычисление и оценивает время нескольких прогонов. Это удобнее для короткого выражения, но повторное исполнение должно быть допустимым. Не измеряйте так отправку платежа или запись сообщения во внешний сервис.

Для самопроверки сравните создание списка квадратов и создание генератора. Если во втором случае не потребить генератор, вы измерите создание объекта вместо вычисления всех квадратов. Сравниваемые фрагменты должны выполнять одинаковый объём работы и возвращать сопоставимый результат.

В отчёте укажите размер входа, состояние окружения и операцию. Первый запуск может включать импорт или прогрев, а последующие — использовать кеш. Ускорение маленького фрагмента не означает ускорения всего ноутбука. Если код существенно меняет состояние, подготовьте независимый вход для каждого повторения.

Продолжите разбор: Отладка и обработка ошибок в ноутбуке.

Продолжить с сохранением прогресса

Перейдите к уроку в учебном кабинете.

Перейти к интерактивному уроку
Магические команды Jupyter Notebook и IPython | Latorn