Style Python: 5 outils pour nettoyer votre code Python

En théorie, tout code Python est OK tant qu'il est syntaxiquement correct et qu'il s'exécute comme prévu. En pratique, vous souhaitez adopter un style cohérent dans tous vos projets, de préférence guidé par les recommandations de style de Python. La bonne nouvelle est que vous n'êtes pas obligé de le faire à la main. L'écosystème Python contient une variété d'outils, du plus ciblé au plus large, pour garantir que le code source Python adhère aux conventions de style.

Dans cet article, nous examinerons quatre outils populaires pour vérifier les styles de code Python, plus un pour reformater le code pour être cohérent. Les IDE Python comme PyCharm ou Visual Studio Code les prennent en charge de manière native ou avec une extension, afin qu'ils puissent être facilement intégrés dans votre flux de travail de développement.

Pycodestyle

PEP 8 est le document qui décrit les conventions de codage de Python - de l'utilisation des tabulations ou des espaces lors de l'indentation (utiliser quatre espaces, problème résolu) à la façon de nommer les variables et les objets. Pycodestyle est le module Python qui vérifie le code Python par rapport aux recommandations PEP 8 et fournit un rapport sur les endroits où le code analysé est hors spécifications.

Pycodestyle ne fournit pas de correctifs automatiques pour les problèmes; c'est sur toi. Mais Pycodestyle est hautement configurable, vous permettant de supprimer des types d'erreurs spécifiques ou d'analyser uniquement des fichiers spécifiques dans une arborescence source. Et à peu près tous les IDE prenant en charge Python prennent également en charge Pycodestyle, c'est donc le choix facile pour la compatibilité universelle, sinon la fonctionnalité.

De nombreux linters de code Python peuvent fonctionner comme des modules en Python, et Pycodestyle ne fait pas exception. Vous pouvez l'utiliser pour vérifier le code par programme, par exemple dans le cadre d'une suite de tests.

Idéal pour:  vérification de base de la conformité PEP 8.

Autopep8

Autopep8 reprend là où Pycodestyle s'arrête. Il utilise Pycodestyle pour déterminer les modifications à apporter, puis reformate le code pour se conformer aux suggestions fournies. Les fichiers existants peuvent être reformatés sur place ou écrits dans de nouveaux fichiers. Autopep8 corrige également une foule d'autres problèmes qui peuvent s'infiltrer, tels que le nettoyage du code converti de Python 2 à Python 3 ou des fichiers contenant des marqueurs de fin de ligne mixtes. Et Autoprep8 peut être utilisé par programme pour reformater le code fourni sous forme de chaînes.

Idéal pour: Conversion de fichiers conformes à PEP-8.

Flocon8

Flake8 regroupe plusieurs outils de linting et de style code Python dans un seul package. Avec PyFlakes, qui utilise la vérification de la syntaxe pour détecter les erreurs de base, et Pycodestyle, dont nous avons discuté ci-dessus, Flake8 fournit un outil supplémentaire pour vérifier la «complexité cyclomatique» d'un projet - c'est-à-dire le nombre de chemins de code indépendants trouvés dans le programme . (La complexité cyclomatique est une métrique potentiellement utile si vous voulez éviter qu'un module de base ne devienne trop basique, par exemple.) À la fin de chaque analyse, Flake8 fournit une métrique de centile pour la qualité globale du code analysé, un outil pratique moyen d'avoir une idée rapide des parties d'une base de code qui sont les plus problématiques.

Flake8 dispose également d'un système de plug-in, de sorte que le linting peut être couplé avec des commits Git ou d'autres actions automatisées - par exemple, pour envoyer du code problématique à un reformateur.

Idéal pour:  évaluer la qualité globale du code, avec des recommandations spécifiques.

Pylint

Pylint est probablement le linter Python le plus largement utilisé et pris en charge. Comme les autres, il recherche les erreurs et les écarts par rapport aux normes de codage dans votre code Python, et propose des changements sur la façon de corriger ces erreurs.

Pylint est également sans doute le plus complet des vérificateurs de code, en ce sens qu'il peut vous avertir d'un grand nombre de problèmes avec votre code, dont certains peuvent même ne pas être pertinents dans votre contexte particulier. Les résultats peuvent être détaillés, mais peuvent également être adaptés aux particularités d'un projet particulier.

Pylint recherche cinq catégories de problèmes de plus en plus problématiques. Les «conventions» sont des violations de PEP 8 ou d'autres règles de cohérence en Python. Les «refacteurs» indiquent des odeurs de code, des erreurs courantes ou du code qui pourrait être retravaillé pour être plus efficace ou moins déroutant, comme les importations cycliques ou les fichiers avec trop de lignes similaires qui pourraient être condensés en une fonction commune. Les «avertissements» sont des problèmes spécifiques à Python, comme du code inaccessible (tout ce qui se trouve après un  return dans une fonction) ou des classes sans  __init__ méthode. Les «erreurs» sont de véritables bogues de code, comme des variables non définies, et les problèmes «fatals» sont ceux qui empêchent même Pylint de fonctionner.

Encore une fois, ce qui rend Pylint à la fois le plus utile et le plus lourd, c'est la quantité de commentaires qu'il donne. La bonne nouvelle est que pour ceux qui veulent l'ajuster, la verbosité et la granularité de Pylint peuvent être modifiées par projet ou même par fichier. De plus, vous pouvez vous appuyer sur une gamme de plug-ins Pylint qui ajoutent des types spécifiques de vérifications, par exemple pour du code trop complexe (longues chaînes de  ifs, etc.) ou du linting pour les intégrés obsolètes.

Idéal pour:  contrôle de la qualité de la soupe aux noix pour le code, en supposant que cela ne vous dérange pas de modifier ses paramètres pour éviter la surcharge

Noir

Le noir n'est pas un outil d'analyse de linter ou de code, mais un outil pour appliquer le style afin d'assurer une meilleure qualité de code. Pour cette raison, il s'associe confortablement aux autres outils décrits ici, car c'est un moyen d'éviter de manière préventive de nombreuses erreurs de style de base.

Le noir est décrit comme «le formateur de code sans compromis» - sans compromis car il n'a pas d'options réglables à l'exception de la longueur de ligne. Black reformate le code Python dans un style singulier, cohérent et lisible, en s'appuyant sur des règles internes pour gérer des problèmes délicats tels que les expressions multilignes, de sorte que même ceux-ci sont reformatés de manière cohérente.

L'un des avantages vantés de l'utilisation du noir est qu'il résout tous les différends sur le formatage, élimine ainsi le «bikeshedding» et rend la sortie linter moins bruyante également. Vous n'avez pas à vous demander comment formater le code d'un projet, ni même à en faire une grande partie manuellement. Vous utilisez juste Black et en avez fini avec lui; vous pouvez même configurer de nombreux IDE pour formater automatiquement le code avec Black. Un autre avantage revendiqué est qu'il rend les  git commits plus propres, car il réduit le nombre de modifications apportées à un fichier donné.

Idéal pour: Fouetter les bases de code dans la conformité stylistique de base en masse .

Comment faire plus avec Python:

  • Comment travailler avec le type de données Liste Python
  • Comment empaqueter des applications Python avec BeeWare Briefcase
  • Comment faire fonctionner Anaconda côte à côte avec d'autres pythons
  • Comment utiliser les classes de données Python
  • Démarrez avec async en Python
  • Comment utiliser asyncio en Python
  • 3 étapes pour une refonte asynchrone Python
  • Comment utiliser PyInstaller pour créer des exécutables Python
  • Tutoriel Cython: Comment accélérer Python
  • Comment installer Python de manière intelligente
  • Comment gérer des projets Python avec Poetry
  • Comment gérer des projets Python avec Pipenv
  • Virtualenv et venv: les environnements virtuels Python expliqués
  • Python Virtualenv et Venv à faire et à ne pas faire
  • Explication des threads et sous-processus Python
  • Comment utiliser le débogueur Python
  • Comment utiliser timeit pour profiler le code Python
  • Comment utiliser cProfile pour profiler le code Python
  • Comment convertir Python en JavaScript (et inversement)