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í!