2022-09-03 15:20 Doba čtení: 11 min

Laďte Python jako hrdina pomocí těchto knihoven a nástrojů

Chcete se stát mistrem v ladění kódu v Pythonu? Prozkoumejte s námi skvělé nástroje a knihovny, které vám usnadní hledání a opravování chyb ve vašich Python projektech!

Python, jakožto univerzální, vysokoúrovňový a objektově orientovaný jazyk, nachází uplatnění v mnoha oblastech vývoje. Je efektivním nástrojem pro vytváření webových aplikací, zpracování dat, a dokonce i pro komplexní projekty jako je strojové učení a datová věda.

Při programování se nevyhneme chybám, které se v kódu objevují. Vývojáři proto podnikají různé kroky k odhalení a opravě těchto chyb. Tím se předchází nežádoucím pádům programů. Tento proces se nazývá ladění.

V tomto článku se podíváme na několik užitečných debuggerů pro Python, které můžete využít. Porovnáme si jejich vlastnosti a ukážeme si, v čem jsou efektivní.

cProfiler: Knihovna pro profilování kódu

cProfiler je oblíbená knihovna a rozšíření C, určené k profilování kódu, který běží po delší dobu. Pomáhá identifikovat části kódu, jejichž provedení trvá nejdéle. I když cProfiler dokáže změřit přesný čas potřebný pro provedení jednotlivých částí kódu, sám o sobě neidentifikuje ani neopravuje chyby v kódu.

Proto je potřeba využít další nástroje pro ladění.

Naštěstí existuje řada doporučených knihoven, jako například ipdb, Django Debug Toolbar, pyelftools, viztracer a py-spy, které vám při ladění kódu v Pythonu mohou velmi pomoci.

ipdb: Interaktivní debugger s podporou IPythonu

ipdb je plnohodnotný Python debugger s podporou IPythonu, který v sobě kombinuje funkcionalitu pdb s výhodami interaktivního shellu IPython. ipdb nabízí například doplňování karet, barevný výstup a magické funkce.

Tento debugger zpřístupňuje debugger IPython exportováním příslušných funkcí. Nabízí také podobné rozhraní pro lepší introspekci, jako modul pdb.

Jak ladit s ipdb

Knihovnu nainstalujete pomocí příkazu pip:

pip install ipdb

Příklad použití 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()

Spusťte soubor Python s příkazem, kde `test.py` je název vašeho souboru:

python -m ipdb test.py

Import ipdb a volání funkce `ipdb.set_trace()` spustí program a aktivuje debugger.

Funkce `ipdb.pm()` (post-mortem) funguje podobně jako magická funkce `%debug`.

Argumenty pro set_trace

Funkce `set_trace` přijímá kontext jako argument pro zobrazení několika definovaných řádků kódu. Argument `cond` přijímá booleovskou hodnotu a spustí rozhraní ipdb, když je nastaven na `True`.

Použití konfiguračního souboru

Argument kontextu můžete nastavit pomocí souboru `idpdb` nebo `setup.cfg`, který se nachází v domovské složce nebo složce projektu. Také můžete dále zkontrolovat funkčnost ipdb.

Django Debug Toolbar: Nástroj pro ladění Django

Django Debug Toolbar je oblíbený nástroj pro ladění v rámci frameworku Django pro Python.

Tato sada panelů, kterou si můžete nakonfigurovat, zobrazuje informace o aktuálním požadavku nebo odpovědi. Po kliknutí na panel nástrojů se zobrazí podrobnější informace.

Tento nástroj je užitečný pro důkladnou kontrolu vývojového prostředí Django.

Proces instalace a konfigurace naleznete zde.

Pyelftools: Knihovna pro analýzu ELF souborů

Knihovna pyelftools je napsaná čistě v Pythonu. Slouží k analýze ELF souborů a informací o ladění DWARF, přičemž ke svému běhu potřebuje pouze Python.

Použití Pyelftools je jednoduché, protože nevyžaduje žádné externí knihovny. Navíc je snadné ji používat i bez instalace. Stačí upravit proměnnou prostředí `PYTHONPATH`.

Nainstalujte ji pomocí:

pip install pyelftools

Implementace pyelftools spočívá v importu a volání v programu.

Icecream 🍦: Vylepšený nástroj pro ladění

Toto je další efektivní nástroj pro ladění kódu v Pythonu.

Použitím Icecream, konkrétně funkce `ic()`, získáte oproti standardnímu `print()` spoustu výhod:

  • Psaní je rychlejší.
  • Velmi dobře tiskne datové struktury.
  • S `ic()` můžete zobrazit výrazy nebo názvy proměnných a jejich hodnoty.
  • Výstup má zvýrazněnou syntaxi.
  • Volitelně zobrazuje kontext programu, včetně názvu souboru, čísla řádku a rodičovské funkce.

Před použitím balíčku jej nainstalujte pomocí příkazu pip:

pip install icecream

Výhodou je, že `ic()` můžete používat ve všech souborech bez nutnosti importu. Stačí ji nainstalovat pomocí `install()`. `install()` přidá `ic()` do vestavěného modulu a všechny soubory importované interpretorem budou `ic()` sdílet.

Do kořenového souboru Python (např. `x.py`) přidejte `ic()` pomocí `install()`.

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

V souboru `y.py`, importujte soubor `x.py` a zavolejte `ic()`.

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

Výsledek:

y
ic| z : 8

`ic()` je efektivní díky své schopnosti zkontrolovat proměnné, které jsou jí předány, a vypsat jejich argumenty i hodnoty, jak je vidět v následujícím příkladě.

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

Výstup:

ic| mult(100): 400

Navíc, `ic()` můžete vložit do již existujícího kódu, protože vrací své argumenty. Následující příklad vrátí `ic| x: 12`, pak `ic| y: 48`.

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

Py-spy: Nástroj pro profilování kódu

Můžete použít py-spy pro vzorkování profilu Python programů. Py-spy vizualizuje provádění Python programů, aniž byste museli restartovat program nebo upravovat jeho kód. Navíc, díky tomu, že je napsaný v Rustu, má nízkou režii.

Také je důležité, že používání py-spy v produkčním kódu je bezpečné, protože běží v odděleném procesu od profilovaného programu Python.

Stejně jako ostatní nástroje, které jsme si uvedli, i py-spy můžete použít po instalaci.

pip install py-spy

I když je váš Python program v produkci, můžete jej pomocí py-spy profilovat a ladit, což z něj dělá kritický nástroj pro profilování Python kódu.

Viztracer: Nástroj pro sledování a vizualizaci běhu

Jako alternativu můžete použít viztracer, ladicí nástroj pro sledování a vizualizaci provádění vašeho Python programu. Jedná se také o profilovací nástroj s nízkou režii.

Co dělá viztracer efektivním nástrojem pro ladění?

  • Jeho použití je jednoduché a nevyžaduje žádné externí balíčky.
  • Viztracer funguje na všech platformách operačního systému: Windows, Linux i macOS.
  • Jeho výkonné front-end rozhraní plynule zobrazuje trasování o velikosti i několika GB.
  • Používá regulární výrazy pro logování libovolných funkcí a dalších informací, jako jsou proměnné a atributy, vyvolané výjimky, operace Garbage Collectoru atd., aniž byste museli upravovat zdrojový kód.
  • Viztracer je nástroj pro ladění s nízkou režií, protože dokáže odfiltrovat nepotřebná data. Staré informace pak uloží před uložením protokolu ve formátu JSON.
  • Umožňuje vkládat vlastní události, jako je okamžitá událost, proměnná událost a událost trvání během běhu programu. Funguje podobně jako ladění pomocí tisku, ale viztracer vám dá vědět, kdy dojde k tisku během trasování dat.

Závěr

Profilování a ladění Pythonu, stejně jako profilování softwaru obecně, je důležitý krok ve vývoji, který vyžaduje vaši pozornost. Pomáhá odhalit chyby v kódu a optimalizovat jeho celkový výkon.

Nástroje pro ladění, které jsme popsali výše, jsou efektivní pomocníci, kteří programátorům Pythonu usnadňují práci.

Vzhledem k tomu, že ostatní ladicí nástroje fungují efektivněji než cProfiler, můžete se stát opravdovým hrdinou ladění, najít a opravit chyby v kódu, a zajistit tak jeho bezproblémový běh.

Příjemné ladění!

Jan Novák
Autor
Czechia

Redaktor zaměřený na Windows, produktivitu a cloudové nástroje.

Předchozí článek
12 nejlepších animačních programů pro vytvoření vysvětlujícího videa
Další článek
12 nejlepších widgetů pro Android, které nabijí váš mobil