img

«Супергеройские» библиотеки и инструменты для отладки Python

21 ноября
20:00
Бесплатный вебинар
Введение в Docker
Ведущий — Филипп Игнатенко.
Руководитель центра разработки
Записаться
img
img

 

Хотите стать настоящим профи в отладке Python? Тогда отлаживайте свой код Python с помощью этих великолепных инструментов и библиотек отладки Python, о которых мы сейчас расскажем!

Python – это высокоуровневый объектно-ориентированный язык программирования общего назначения, который используется для самых разных целей разработки. Более того, это эффективный инструмент разработки различных приложений – от веб-приложений до веб-скрейперов и более сложных приложений, например, приложений машинного обучения и науки о данных.

В процессе разработки могут возникать ошибки, которые в программировании называются багами. Чтобы обнаружить и устранить существующие и потенциальные баги в коде разработчики предпринимают несколько шагов. В результате они предотвращают «поломку» программного кода. Этот процесс называется отладкой.

В этой статье мы рассмотрим несколько отладчиков Python, которые вы можете использовать в своих проектах. Мы также посмотрим, насколько эти отладчики отличаются друг от друга и что делает их такими эффективными.

1. Библиотека отладки cProfiler

cProfiler – это популярная библиотека, которая является расширением С. Она выполняет профилирование кода с длительным выполнением. В конечном результате она определяет блоки программного кода, выполнение которых занимает много времени. И хотя она определяет точное время, которое требуется для выполнения разных блоков кода, она не может выявить и исправить абсолютно все баги в коде.

В связи с этим возникает необходимость использования других отладчиков. 

К счастью, вместо этого для отладки вашего кода Python вы можете использовать такие библиотеки, как ipdb, Django-debug-toolbar, pyelftools, viztracer и py-spy.

2. Инструмент отладки ipdb

Отладчик Python с поддержкой IPython представляет собой сторонний интерактивный отладчик с функциональностью pdb. ipdb также включает в себя интерактивную оболочку IPython. Она поддерживает заполнение клавишей TAB, подсветку синтаксиса, магические методы и прочие функции. 

Доступ к отладчику IPython осуществляется путем экспорта соответствующих функций. Кроме того, ipdb предлагает интерфейс для интроспекции, как и в модуле pdb.

Отладка с помощью ipdb

Библиотеку необходимо установить с помощью команды pip:

pip install ipdb

Ниже приведен пример использования ipdb:

import ipdb
alpha_list = ['a', 'b', 'c']
fruit_list = ['orange', 'mango', 'kiwi']

def nested_loop():
    for fruit_list:
        print (fruit)
        ipdb.set_trace()
    for x in alpha_list:
        print(x)
if __name__ == '__main__':
    nested_loop()

Запустите файл Python с помощью следующей команды (здесь test.py – это имя моего файла):

python -m ipdb test.py

Импорт ipdb и запуск функции ipdb.set_trace() позволяют запустить программу, а также запустить отладчик в процессе ее выполнения. 

Функция ipdb.pm() (post-mortem) действует по аналогии с магической функцией %debug.

Аргументы set_trace

Чтобы отобразить несколько определенных строк кода, передайте в функцию set_trace() в качестве аргумента содержимое. Кроме того, вы можете передать в качестве аргумента cond. Этот аргумент принимает логические значения и запускает интерфейс ipdb в случае, если вы устанавливаете значение cond как true.

Использование файла конфигурации

Аргумент контекста можно задать с помощью файла idpdb или файла setup.cfg, которые вы можете найти в домашней папке или папке проекта соответственно. При этом вы можете проверить функциональность ipdb.

3. Django Debug Toolbar

Django Debug Toolbar – это популярный инструмент отладки в Django (фреймворке Python).

Это настраиваемый набор панелей отображает текущую отладочную информацию запроса или ответа. При нажатии на панель инструментов отображается более подробная информация о содержимом панели.

Этот инструмент тщательно проверяет среду разработки Django.

Инструкции по установке и настройке вы найдете здесь.

4. Библиотека Pyelftools

Библиотека pyelftools основана исключительно на Python. Она разбирает и анализирует файлы ELF и информацию об отладке в формате DWARF, а для ее запуска необходим только Python.

Pyelftools довольно проста в использовании, так как у нее нет каких-либо внешних библиотек. Кроме того, ее можно использовать без установки, и это не так сложно. Для этого необходимо всего лишь настроить переменную среды PYTHONPATH.

Установить ее можно следующим образом:

pip install pyelftools 

Чтобы подготовить pyelftools к использованию, ее нужно просто импортировать и вызвать в программе.

5. Инструмент отладки icecream

Это еще один эффективный инструмент отладки для разработчиков Python.

Отладчик icecream, в частности функция ic(), имеет гораздо больше преимуществ в сравнении с функцией print():

  • Можно быстрее набирать текст
  • Хорошо справляется с печатью структур данных
  • С помощью ic() можно выводить выражения или имена и значения переменных
  • Подсвечивается синтаксис вывода
  • По желанию включается контекст программы, в том числе имя файла, номер строки и родительская функция. 

Прежде чем использовать этот пакет, его необходимо установить с помощью команды pip:

pip install icecream

Хорошая новость в том, что вы можете использовать ic() во всех файлах, не импортируя его во все эти файлы, а просто установив его с помощью install(). Более того, функция install() добавляет ic() во встроенные модули, то есть доступ к ic() будут иметь все файлы, которые импортирует интерпретатор.

С помощью install() добавьте ic() в свой первый корневой файл Python, который вы, например, можете назвать x.py:

from icecream import install
install()
from y import mult
mult()

Импортируйте файл x.py в файле y.py и вызовите ic():

def mult():
    z=8
    ic(z)

В результате вы получите следующее:

y
ic| z : 8

Что же делает функцию ic() такой эффективной? А вот что: ее способность проверять передаваемые ей переменные, в том числе саму себя, а только потом печатать аргументы и значения этих аргументов, как в следующем примере:

from icecream import ic
def mult(x):
    return x * 4
ic(mult(100))

Результат будет такой:

ic| mult(100): 400

Помимо всего прочего, вы можете добавить функцию ic() в уже существующий код, так как она возвращает свои собственные аргументы. Например, ниже сначала возвращается ic| x: 12, а только потом ic| y: 48.

from icecream import ic
x = 12
def mult(x):
    return x*4
    y = mult(ic(x))
    ic(y)

6. Отладка с помощью инструмента py-spy

В качестве инструмента отладки можно использовать py-spy, предназначенный для профилирования примеров программ, написанных на Python. py-spy визуализирует процесс выполнения программы, не перезапуская ее и не изменяя ее код. К тому же, он написан на Rust, а это значит, что он потребляет мало ресурсов.

Плюс к этому, стоит учитывать, что использование py-spy для вашего рабочего кода Python полностью безопасно, так как он запускает процесс отдельно от профилируемой программы.

Как и любой другой рассмотренный нами инструмент, вы можете начать использовать его сразу после установки:

pip install py-spy 

Даже если ваша программа обслуживает производственный трафик, вы все равно можете профилировать и отлаживать эту программу с помощью py-spy. Эта особенность делает его незаменимым инструментом профилирования Python.

7. Отладчик Viztracer

В качестве альтернативного варианта вы можете рассмотреть инструмент отладки под названием viztracer. С его помощью вы можете отслеживать и визуализировать выполнение программы Python. По совместительству это также инструмент профилирования, который тратит минимум ресурсов на ведение журнала.

Что же делает viztracer таким эффективным?

  • Им довольно легко пользоваться, а его работа не зависит от внешних пакетов
  • Viztracer работает на всех операционных системах: Windows, Linux или macOS
  • Его мощный интерфейс способен выполнять плавный рендеринг трассировки в 1 Гб
  • Для регистрации произвольных функций и дополнительной информации (переменных и атрибутов, возникающих исключений, операций сборщика мусора и т.д.) без изменения какого-либо блока кода в исходном коде он использует RegEx
  • Viztracer требует малое количество ресурсов, так как способен отфильтровывать данные, которые вам не нужны в вашей программе. Затем он сохраняет старую информацию в формате JSON и делает дамп журнала.
  • Его можно использовать для вставки пользовательских событий, таких как мгновенное, переменное или длительное событие, в процессе выполнения программы. Получается, что он работает как отладчик вывода, за исключением того, что при отслеживании данных viztracer сообщает вам, когда происходит печать.

Заключение

Профилирование и отладка Python, как и профилирование ПО, - это важный этап в разработке, которому стоит уделить внимание. На этом этапе вы исключаете любые фрагменты кода с ошибками и оптимизируете общую производительность кода. 

Инструменты отладки, которые мы рассмотрели в этой статье, вполне можно назвать эффективными инструментами, которые в значительной мере облегчают работу разработчиков Python.

Видя, что другие инструменты отладки, работают более эффективно, нежели cProfiler, вы можете, как настоящий супергерой, отладить свой код Python, исправить любые потенциальные ошибки с помощью любого из этих отладчиков и избавить ваш код от «поломок».

Удачной отладки!

Ссылка
скопирована
Получите бесплатные уроки на наших курсах
Все курсы
Программирование
Скидка 25%
Python-программист с нуля
Стань разработчиком на одном из самых популярных языков программирования.
Получи бесплатный
вводный урок!
Пожалуйста, укажите корректный e-mail
отправили вводный урок на твой e-mail!
Получи все материалы в telegram и ускорь обучение!
img
Еще по теме:
img
Гипервизор - это программное обеспечение для виртуализации, используемое для создания и запуска виртуальных машин (ВМ). Гипервиз
img
Виртуализация серверов позволяет запускать несколько виртуальных машин на одном физическом сервере. Запуск виртуальных машин (ВМ
img
Сегодня мы рассмотрим, как настроить и использовать PHP в проекте. Но прежде чем начать, нужно понять, что такое PHP. Что такое
img
Как разработчик, вы знаете, что HTML расшифровывается как HyperText Markup Language (язык разметки гипертекста). HTML — это язык
img
Бесконечные споры вокруг искусственного интеллекта приводят к путанице. Существует много терминов, которые кажутся похожими, но
img
SVG расшифровывается как масштабируемая векторная графика. Это веб-дружелюбный векторный формат файлов, используемый для отображ
21 ноября
20:00
Бесплатный вебинар
Введение в Docker