Налагоджуйте Python як герой за допомогою цих бібліотек та інструментів

Бажаєте стати майстром налагодження Python? Тоді ознайомтеся з чудовими інструментами та бібліотеками, які допоможуть вам у цьому процесі.

Python – це гнучка об’єктно-орієнтована мова програмування, що застосовується в різноманітних сферах розробки. Вона є потужним інструментом для створення веб-застосунків, збору веб-даних, а також складніших систем, таких як машинне навчання та аналіз даних.

Під час розробки неминуче виникають помилки, відомі як “баги”. Розробники використовують різні методи для виявлення та усунення цих помилок, як наявних, так і потенційних. Це запобігає збоям у роботі програмного забезпечення. Процес пошуку та виправлення помилок називається налагодженням.

У цій статті ми розглянемо декілька доступних налагоджувачів Python, їх відмінності та ефективність застосування.

cProfiler: Бібліотека для профілювання

cProfiler – це розповсюджена бібліотека та розширення C, що застосовується для профілювання коду, який виконується тривалий час. Вона визначає ділянки коду, які потребують найбільше часу на виконання. Хоча cProfiler точно вимірює час виконання різних частин коду, він не допомагає усувати помилки в коді. Тому виникає потреба у використанні додаткових інструментів налагодження.

На щастя, існують альтернативні бібліотеки, такі як ipdb, Django Debug Toolbar, pyelftools, viztracer та py-spy, які є чудовими інструментами для налагодження коду Python.

ipdb: Інтерактивний налагоджувач Python

ipdb – це повноцінний налагоджувач Python з підтримкою IPython, що є інтерактивним налагоджувачем сторонніх розробників. Він включає функціонал pdb, а також інтегрується з інтерактивною оболонкою IPython. Це забезпечує завершення табуляцією, підтримку кольору та магічні функції. Ipbd надає доступ до налагоджувача IPython через експорт відповідних функцій, пропонуючи зручний інтерфейс для самоаналізу, подібний до модуля pdb.

Як використовувати ipdb

Спочатку необхідно встановити бібліотеку, скориставшись командою:

pip install ipdb

Приклад використання ipdb може виглядати наступним чином:

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

def nested_loop():
    for fruit in 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, який також приймає set_trace, є логічним значенням і запускає інтерфейс ipdb, коли cond є істинним.

Файл конфігурації

Аргумент контексту можна налаштувати через файл .idpdb або setup.cfg, які знаходяться в домашній папці або папці проєкту. Ви можете глибше вивчити функціонал ipdb на практиці.

Django Debug Toolbar: Інструмент для налагодження Django

Django Debug Toolbar є популярним інструментом для налагодження у фреймворку Django. Він показує інформацію про налагодження поточного запиту або відповіді. Панелі інструментів можна налаштовувати. Коли ви натискаєте на панель, відображається додаткова інформація про її вміст. Цей інструмент ретельно перевіряє середовище розробки Django. Інструкції зі встановлення та налаштування ви знайдете тут.

pyelftools: Бібліотека для аналізу ELF-файлів

Бібліотека pyelftools повністю написана на Python. Вона аналізує файли ELF та інформацію про налагодження DWARF, і для її роботи потрібен лише Python. Pyelftools проста у використанні, не має зовнішніх залежностей. Використовувати її можна без встановлення, лише налаштувавши PYTHONPATH в змінних оточення. Встановити pyelftools можна за допомогою:

pip install pyelftools 

Для використання pyelftools достатньо імпортувати її у свій код.

Icecream: Інструмент для налагодження з ic()

Це ще один ефективний інструмент для налагодження коду Python. Використання icecream, а саме функції ic(), має ряд переваг над print(), як зазначено нижче:

  • Введення тексту відбувається швидше.
  • Зручно виводить структури даних.
  • Показує вирази або імена змінних та їх значення за допомогою ic().
  • Виконує підсвічування синтаксису.
  • Включає контекст програми, такий як назва файлу, номер рядка та назву батьківської функції.

Перед використанням пакета, встановіть його за допомогою команди:

pip install icecream

Перевага в тому, що ви можете використовувати ic() у всіх файлах без необхідності імпортувати її, встановивши за допомогою install(). Функція install() додає ic() до вбудованого модуля. Всі файли, які імпортує інтерпретатор, матимуть спільний доступ до ic(). Наприклад, у файл x.py, додайте:

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

А у файлі y.py:

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)

py-spy: Профілювальник коду Python

py-spy дозволяє профілювати програми Python, не перезапускаючи їх та не змінюючи коду. Цей інструмент візуалізує виконання програми Python. Py-spy написаний на Rust і має низькі накладні витрати. Завдяки тому, що py-spy запускає окремий процес від профільної програми, його безпечно використовувати для працюючого коду Python. Встановити py-spy можна за допомогою:

pip install py-spy 

Py-spy є важливим інструментом профілювання Python, оскільки дозволяє профілювати та налагоджувати програму, яка обробляє трафік.

Viztracer: Інструмент для відстеження та візуалізації виконання

Viztracer – це ще один інструмент для відстеження та візуалізації виконання програм Python. Він має низькі витрати на журналювання. Що робить viztracer ефективним інструментом налагодження?

  • Простий у використанні, не залежить від зовнішніх пакетів.
  • Працює на всіх операційних системах: Windows, Linux, macOS.
  • Потужний інтерфейс рендерить трасування великих об’ємів даних.
  • Використовує RegEx для реєстрації довільних функцій та додаткової інформації, наприклад змінні та атрибути, виключення, операції збирача сміття, тощо. При цьому не потрібно змінювати жодної частини вихідного коду.
  • Viztracer фільтрує зайві дані, зберігає потрібну інформацію та створює журнал у форматі JSON.
  • Підтримує вставлення спеціальних подій під час виконання програми, наприклад миттєві події, змінні події та події тривалості. Він працює як налагодження друку, але повідомляє, коли відбувається друк під час трасування даних.

Висновок

Профілювання та налагодження Python є важливим етапом розробки, що потребує уваги. Він допомагає виявляти помилки та оптимізувати продуктивність коду. Інструменти налагодження, розглянуті вище, є ефективними засобами для полегшення роботи розробника Python. Замість використання cProfiler, ви можете скористатися іншими ефективними інструментами, щоб виявляти та виправляти потенційні помилки, забезпечуючи безперебійну роботу вашого коду. Бажаємо вам вдалого налагодження!