Урок курса

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

Продолжить с проверкой и прогрессом

Откройте интерактивный раннер с заданиями урока.

Перейти к интерактивному уроку