Хотите стать настоящим профи в отладке 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, исправить любые потенциальные ошибки с помощью любого из этих отладчиков и избавить ваш код от «поломок».
Удачной отладки!