Déboguez Python comme un héros avec ces bibliothèques et outils
Souhaitez-vous maîtriser l'art du débogage en Python ? Découvrez les outils et bibliothèques de débogage Python incontournables que nous allons explorer !
Python est un langage de programmation polyvalent, de haut niveau et orienté objet, largement utilisé dans divers domaines du développement. C'est un outil puissant pour créer des applications web, extraire des données du web, et développer des solutions plus complexes telles que l'apprentissage automatique et la science des données.
Lors du développement, des erreurs, communément appelées "bugs" en programmation, sont susceptibles de se produire. Les développeurs adoptent diverses approches pour identifier et éradiquer les bugs existants ou potentiels dans le code. Cette démarche permet de prévenir les dysfonctionnements du programme. Ce processus est ce que nous appelons le débogage.
Cet article se penche sur plusieurs débogueurs Python que vous pouvez utiliser. Nous examinerons également leurs spécificités et les raisons pour lesquelles leur mise en œuvre est efficace.
La bibliothèque de débogage cProfiler
cProfiler est une bibliothèque très appréciée, une extension C dédiée à l'analyse des performances du code. Elle permet de repérer les parties du code qui prennent le plus de temps à s'exécuter. Bien qu'elle puisse identifier le temps d'exécution précis de différentes sections, elle n'est pas conçue pour identifier ou corriger entièrement les bugs.
Il est donc souvent nécessaire de recourir à d'autres débogueurs plus spécifiques.
Heureusement, vous pouvez opter pour des bibliothèques comme ipdb, Django-debug-toolbar, pyelftools, viztracer et py-spy pour déboguer efficacement votre code Python.
L'outil de débogage ipdb
Le débogueur Python compatible avec IPython est un débogueur interactif tiers qui intègre les fonctionnalités du pdb. ipdb propose également un support pour le shell interactif IPython, avec notamment la complétion par tabulation, la coloration syntaxique et les fonctions magiques.
Ce débogueur donne accès au débogueur IPython en exportant les fonctions appropriées. Il offre une interface similaire pour une meilleure introspection, tout comme le module pdb.
Déboguer avec ipdb
L'installation de cette bibliothèque se fait simplement avec la commande pip ci-dessous :
pip install ipdb
Voici un exemple d'utilisation d'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()
Pour exécuter le fichier Python, utilisez la commande suivante en remplaçant "test.py" par le nom de votre fichier :
python -m ipdb test.py
L'importation d'ipdb et l'appel de la fonction `ipdb.set_trace()` démarrent le programme et activent le débogueur pendant son exécution.
La fonction `ipdb.pm()` (post-mortem) fonctionne de manière similaire à la fonction magique `%debug`.
Arguments de set_trace
Vous pouvez passer le contexte en argument à `set_trace` pour afficher plusieurs lignes de code définies. De plus, `cond`, que `set_trace` accepte également comme argument, prend une valeur booléenne et active l'interface ipdb lorsque la condition est vraie.
Utilisation du fichier de configuration
Vous pouvez définir l'argument de contexte via un fichier `idpdb` ou le fichier `setup.cfg` situé respectivement dans le dossier de démarrage et le dossier du projet. Nous vous encourageons à explorer plus en détail les fonctionnalités d'ipdb.
La barre d'outils de débogage Django
La Barre d'outils de débogage de Django est un outil de débogage très répandu dans Django, un framework Python.
Cet ensemble de panneaux configurables affiche les informations de débogage concernant la requête ou la réponse en cours. Un clic sur la barre d'outils révèle plus de détails sur le contenu du panneau.
Cet outil permet une inspection approfondie de l'environnement de développement Django.
Suivez les instructions d'installation et de configuration ici.
La bibliothèque Pyelftools
La bibliothèque pyelftools est entièrement écrite en Python. Elle est capable d'analyser les fichiers ELF et les informations de débogage DWARF, et ne nécessite que Python pour fonctionner.
Pyelftools est facile à utiliser car elle ne dépend d'aucune bibliothèque externe. De plus, l'utiliser sans installation est simple : il suffit d'ajuster la variable d'environnement `PYTHONPATH`.
Vous pouvez l'installer avec la commande :
pip install pyelftools
Pour utiliser pyelftools, il vous suffit de l'importer et de l'invoquer dans votre programme.
L'outil de débogage IceCream 🍦
Il s'agit d'un autre outil de débogage efficace pour les développeurs Python.
L'utilisation de icecream, via la fonction `ic()`, offre plusieurs avantages par rapport à `print()`, comme listés ci-dessous:
- La saisie est plus rapide.
- Elle affiche les structures de données de manière lisible.
- Affiche les expressions ou les noms de variables et leurs valeurs avec `ic()`.
- Met en évidence la syntaxe de la sortie.
- Inclut, en option, le contexte du programme, comme le nom du fichier, le numéro de ligne et la fonction parente.
Avant d'utiliser ce package, installez-le avec la commande pip suivante :
pip install icecream
L'avantage est que vous pouvez utiliser `ic()` dans n'importe quel fichier sans nécessairement l'importer à chaque fois, en l'installant avec la fonction `install()`. De plus, `install()` ajoute `ic()` au module `builtins`. Tous les fichiers importés par l'interpréteur partageront `ic()`.
Dans votre premier fichier Python racine, par exemple `x.py`, ajoutez `ic()` en utilisant `install()`.
from icecream import install install() from y import mult mult()
Dans le fichier `y.py`, où le fichier `x.py` est importé, vous pouvez appeler `ic()`
def mult():
z=8
ic(z)
Résultats :
y ic| z : 8
L'efficacité de `ic()` réside dans sa capacité à inspecter les variables qui lui sont transmises, puis à imprimer les arguments et leurs valeurs, comme dans l'exemple suivant.
from icecream import ic
def mult(x):
return x * 4
ic(mult(100))
Sortie :
ic| mult(100): 400
De plus, vous pouvez insérer `ic()` dans du code existant car elle renvoie ses arguments. L'exemple ci-dessous renvoie `ic| x : 12`, puis `ic| y : 48`.
from icecream import ic
x = 12
def mult(x):
return x*4
y = mult(ic(x))
ic(y)
Débogage avec l'outil py-spy
Vous pouvez utiliser py-spy pour profiler des exemples de programmes Python en tant qu'outil de débogage. Py-spy permet de visualiser l'exécution d'un programme Python sans le redémarrer ou modifier son code. De plus, comme il est écrit en Rust, il a une faible surcharge.
Il est également important de noter que l'utilisation de py-spy sur du code Python en production est sûre, car il s'exécute dans un processus distinct de celui du programme Python profilé.
Comme tous les autres outils précédemment présentés, py-spy doit être installé avant d'être utilisé.
pip install py-spy
Même lorsque votre programme Python gère du trafic en production, vous pouvez toujours le profiler et le déboguer avec py-spy, ce qui en fait un outil de profilage Python essentiel.
Le débogueur Viztracer
Vous pouvez également utiliser Viztracer, un outil de débogage qui permet de suivre et visualiser l'exécution de votre programme Python. Il s'agit également d'un outil de profilage avec un faible impact sur le système.
Qu'est-ce qui fait de viztracer un outil de débogage efficace ?
- Il est facile à utiliser et ne dépend pas de packages externes pour fonctionner.
- Viztracer fonctionne sur toutes les plateformes : Windows, Linux et macOS.
- Son interface utilisateur puissante permet de visualiser facilement les traces au niveau Go.
- Il utilise des expressions régulières pour enregistrer des fonctions arbitraires et des informations supplémentaires comme les variables et attributs, les exceptions levées, les opérations du garbage collector, etc., sans modifier une seule ligne de votre code source.
- Viztracer est un outil de débogage peu coûteux car il permet de filtrer les données dont vous n'avez pas besoin. Il conserve les informations restantes avant de vider le journal au format JSON.
- Vous pouvez l'utiliser pour insérer des événements personnalisés comme l'événement instantané, l'événement variable et l'événement de durée pendant l'exécution du programme. De cette manière, il fonctionne comme un débogage par affichage, sauf que Viztracer vous permet de voir quand ces affichages se produisent lors du traçage.
Conclusion
Le profilage et le débogage Python, tout comme le profilage logiciel en général, sont des étapes cruciales du développement qui requièrent une attention particulière. Cette étape permet d'éliminer toute section de code contenant des bugs afin d'optimiser les performances globales du code.
Les outils de débogage que nous avons présentés ci-dessus sont des outils efficaces qui facilitent le travail des développeurs Python.
Sachant que ces outils fonctionnent plus efficacement que cProfiler, vous pouvez, en véritable expert, déboguer votre code Python et corriger les bugs potentiels en utilisant ces débogueurs pour assurer un fonctionnement stable de votre code.
Bon débogage !