Trouver la boîte à outils parfaite: analyse des modèles de projet Python populaires

Le matériel, dont nous publions la traduction aujourd'hui, est consacré à l'histoire des outils utilisés pour créer des applications Python. Il est conçu pour les programmeurs qui ont déjà quitté la catégorie des débutants, mais qui n'ont pas encore atteint la catégorie des développeurs Python expérimentés. Pour ceux qui sont impatients de commencer à pratiquer, l'auteur suggère d'utiliser Flake8 , pytest et Sphinx dans des projets Python existants . Il recommande également un regard sur pré-commit , Black et Pylint . Ceux qui envisagent de démarrer un nouveau projet, il conseille de faire attention à la poésie et Dependabot .





Aperçu


Il m'a toujours été difficile de me faire une opinion objective sur les «meilleures pratiques» du développement Python. Dans le monde de la technologie, certaines tendances populaires émergent constamment, n'existant souvent pas longtemps. Cela complique l'extraction du «signal utile» du bruit de l'information.

Les outils les plus récents ne sont souvent bons, pour ainsi dire, que sur papier. Peuvent-ils vraiment aider le programmeur pratique avec quelque chose? Ou leur application ne conduit-elle qu'à l'introduction de quelque chose de nouveau dans le projet, dont l'efficacité doit être maintenue, qui comporte plus de difficultés que d'avantages?

Je n'avais pas une compréhension claire de ce que je considérais exactement comme les "meilleures pratiques" de développement. Je suppose que j'ai trouvé quelque chose d'utile, basé principalement sur des preuves épisodiques d '"utilité", et sur la mention occasionnelle de cela dans les conversations. Au cours des dernières semaines, j'ai décidé de mettre de l'ordre dans cette affaire. Pour ce faire, j'ai commencé à analyser tous les modèles de projets Python que j'ai pu trouver (nous parlons de modèles utilisés par l' utilitaire de ligne de commande cookiecutter pour créer des projets Python basés sur eux).

Il m'a semblé qu'il était très intéressant d'en savoir plus sur le type d'outils auxiliaires que les auteurs de modèles considèrent dignes d'intégrer ces outils dans de nouveaux projets Python créés à partir de ces modèles.

J'ai analysé et comparé les 18 projets de modèles les plus populaires (de 76 à 6300 étoiles sur GitHub), en accordant une attention particulière au type d'outils auxiliaires qu'ils utilisent. Les résultats de cette analyse se trouvent dans ce tableau.

Ci-dessous, je veux partager les principales conclusions que j'ai tirées lors de l'analyse des modèles populaires.

Normes de facto


Les outils abordés dans cette section sont inclus dans plus de la moitié des modèles. Cela signifie qu'ils sont perçus comme standard dans un grand nombre de projets Python réels.

â–ŤFlake8


J'utilise Flake8 depuis un certain temps , mais je ne connaissais pas la position dominante dans le domaine du peluchage qu'occupe cet outil. Je pensais qu'il existait dans une sorte de compétition, mais la grande majorité des modèles de projets l'utilisaient.

Oui, ce n'est pas surprenant. Il est difficile d'opposer quelque chose à la commodité de linting l'ensemble de la base de code du projet en quelques secondes. Ceux qui souhaitent utiliser des développements de pointe peuvent recommander un aperçu du guide de style wemake-python . C'est quelque chose comme "Flake8 sur les stéroïdes." Cet outil pourrait bien contribuer au transfert vers la catégorie des autres outils similaires obsolètes (comme Pylint).

â–ŤPytest et couverture.py


La grande majorité des modèles utilisent pytest . Cela réduit l'utilisation du cadre de test standard le plus uniforme. Pytest semble encore plus attrayant lorsqu'il est combiné avec tox . C'est exactement ce qui a été fait dans environ la moitié des modèles. La couverture du code avec des tests est le plus souvent vérifiée à l'aide de coverage.py .

â–ŤSphinx


La plupart des modèles utilisent Sphinx pour générer de la documentation . À ma grande surprise, MkDocs est rarement utilisé à cette fin.

Par conséquent, nous pouvons dire que si vous n'utilisez pas Flake8, pytest et Sphinx dans votre projet actuel, vous devriez envisager de les introduire.

Des outils prometteurs


Dans cette section, j'ai rassemblé ces outils et techniques de travail, dont l'utilisation dans les modèles suggère quelques tendances. Le fait est que bien que tout cela n'apparaisse pas dans la plupart des modèles de projet, il se trouve dans de nombreux modèles assez récents. Donc - tout cela mérite attention.

â–ŤPyproject.toml


L'utilisation des fichiers est pyproject.tomlsuggérée dans PEP 518 . Il s'agit d'un mécanisme moderne pour spécifier les exigences d'assemblage du projet. Il est utilisé dans la plupart des modèles assez jeunes.

▍Poésie


Bien que l'écosystème Python ne fonctionne pas bien en termes de bon outil de gestion des dépendances, je pense prudemment que la poésie pourrait être l'équivalent de npm du monde JavaScript dans le monde Python .

Les modèles de projets les plus jeunes (mais néanmoins populaires) semblent être d'accord avec cette idée. Certes, il vaut la peine de dire que si quelqu'un travaille sur une sorte de bibliothèque qu'il peut envisager de distribuer via PyPI , il devra toujours utiliser setuptools . (Il convient de noter qu'après la publication de ce document, j'ai été informé que ce n'est apparemment plus un problème).

Aussi, soyez prudent si votre projet (il en va de même pour les dépendances) repose sur Conda. Dans ce cas, la poésie ne vous conviendra pas, car cet outil, dans sa forme actuelle, lie le développeur à pip et à virtualenv .

â–ŤDependabot


Dependabot vérifie régulièrement l'obsolescence des dépendances du projet et essaie d'aider le développeur en ouvrant automatiquement PR.

Personnellement, j'ai récemment vu cet outil plus souvent qu'avant. Il me semble que c'est un excellent outil dont l'ajout au projet affecte très positivement le projet. Dependabot aide à réduire les risques de sécurité en poussant les développeurs à maintenir les dépendances à jour.

En conséquence, je vous conseille de ne pas perdre de vue la poésie et le Dependabot. Pensez à introduire ces outils dans votre prochain projet.

Recommandations personnelles


L'analyse des modèles de projet m'a donné une perception quelque peu ambivalente des outils que je vais énumérer dans cette section. Dans tous les cas, je veux utiliser cette section pour en parler en fonction de ma propre expérience. À un moment donné, ils m'ont été très utiles.

▍Pré-engager


Même si vous êtes extrêmement discipliné - ne gaspillez pas votre énergie à effectuer des actions de routine simples telles que du code supplémentaire exécuté à travers le linter avant d'envoyer le code au référentiel. Des tâches similaires peuvent être transmises à Pre-commit . Et il vaut mieux consacrer votre énergie au TDD et au travail d'équipe sur le code.

â–ŤPylint


Bien que Pylint soit critiqué pour sa lenteur, bien que cet outil soit critiqué pour les caractéristiques de ses paramètres, je peux dire qu'il m'a permis de grandir au-dessus de moi-même dans le domaine de la programmation.

Il me donne des instructions spécifiques sur les parties du code que je peux améliorer, me dit comment rendre le code plus conforme aux règles. Pour un outil gratuit, c'est déjà beaucoup. Par conséquent, je suis prêt à supporter les inconvénients associés à Pylint.

â–ŤNoir


Noir à l'origine du débat sur l'endroit où placer les espaces dans le code. Cela protège nos équipes des conversations vides et des différences insignifiantes dans les fichiers causées par les différents paramètres des éditeurs.

Dans mon cas, cela égaye ce que je n'aime pas personnellement en Python (la nécessité d'utiliser beaucoup d'espaces). Par ailleurs, il convient de noter que le projet Black en 2019 a rejoint la Python Software Foundation, ce qui indique le sérieux et la qualité de ce projet.

Par conséquent, je tiens à dire que si vous n'utilisez toujours pas la pré-validation, Black et Pylint - réfléchissez à la pertinence de ces outils pour votre équipe.

Sous-totaux


Douze des dix-huit modèles étudiés ont été créés en utilisant le cadre de découpe de cuisine . Certains de ces modèles où ce cadre n'est pas utilisé ont des qualités intéressantes.

Mais étant donné que le Cookiecutter est le principal framework pour créer des modèles de projet, ceux qui décident d'utiliser un modèle qui n'utilisait pas de Cookiecutter devraient avoir de très bonnes raisons à cela. Une telle décision devrait être très bien justifiée.

Ceux qui recherchent un modèle pour leur projet doivent choisir un modèle qui correspond le mieux à leur propre vision des choses. Si vous, lorsque vous créez des projets selon un certain modèle, devez constamment les reconfigurer de la même manière, réfléchissez à la façon de créer un tel modèle et de l'affiner, en vous inspirant d'exemples de modèles de ma liste.

Et si vous êtes attiré par l'aventure - créez votre propre modèle à partir de zéro. Cookiecutter est une excellente fonctionnalité de l'écosystème Python, et le processus simple de création de modèles Jinja vous permet de faire rapidement et facilement quelque chose de votre choix.

Bonus: recommandations de modèle


â–ŤDjango


Avec les modèles Django les plus populaires, envisagez d'utiliser le modèle wemake-django . Il donne l'impression d'un produit bien pensé.

▍ Traitement et analyse des données


Dans la plupart des projets visant à traiter et analyser des données, le modèle Cookiecutter Data Science est utile . Cependant, les scientifiques des données devraient également se pencher sur Kedro .

Ce modèle étend Cookiecutter Data Science avec un mécanisme pour créer des pipelines de traitement de données normalisés. Il prend en charge le chargement et l'enregistrement des données et des modèles. Ces fonctionnalités sont très susceptibles de trouver une application valable dans votre prochain projet.

Ici, je voudrais également exprimer ma gratitude aux créateurs du modèle shablona pour la préparation d'une documentation de très haute qualité. Cela peut vous être utile même si vous finissez par choisir autre chose.

▍ Modèles à usage général


Le modèle à usage général à choisir d'une manière ou d'une autre dépend de ce que vous allez développer exactement sur la base de ce modèle - une bibliothèque ou une application standard. Mais, en choisissant un tel modèle, ainsi que les projets les plus populaires de ce type, je regarderais très attentivement le modèle Python de Jace .

Ce n'est pas un modèle bien connu, mais j'aime le fait qu'il a la poésie, l' isort , le noir, le pylône et le mypy .

PyScaffold est l'un des modèles les plus populaires non basés sur les découpes de cuisine. Il a de nombreuses extensions (par exemple, pour Django et pour les projets Data Science ). Il télécharge également les numéros de version de GitHub en utilisant setuptools-scm. De plus, c'est l'un des rares modèles prenant en charge Conda.

Voici quelques modèles qui utilisent la technologie GitHub Actions:

  1. Le modèle Python Best Practices Cookiecutter , qui, je tiens à le noter, possède la plupart de mes outils préférés.
  2. Le modèle Blueprint / Boilerplate For Python Projects , que je trouve assez intéressant, car l'opportunité qu'il leur donne de trouver des problèmes de sécurité courants avec Bandit, semble prometteur. De plus, ce modèle possède une fonctionnalité remarquable, qui consiste dans le fait que les paramètres de tous les outils sont collectés dans un seul fichier setup.cfg.

Et enfin - je recommande de jeter un œil au modèle de paquet wemake-python . Je pense que ça vaut le coup de toute façon. En particulier - si vous aimez le modèle Django du même développeur, ou si vous allez utiliser le guide de style avancé wemake-python au lieu de Flake8 pur.

Sommaire


Après avoir publié cet article, j'ai écrit à ce sujet à Guido van Rossum.

Peut-être que vous, comme moi, serez intéressé par son commentaire . Il a dit que j'avais oublié mypy et qu'il était plus facile de travailler non pas avec Sphinx, mais avec Markdown. Concernant le noir, il a noté que cet outil est surévalué et ne peut bénéficier que si les membres de l'équipe discutent beaucoup sur les styles. Selon lui, ceux qui utilisent Flake8 n'ont pas besoin de Pylint. Il n'avait pas entendu parler de Poésie et Dependabot. De plus, il a conseillé d'utiliser une certaine solution CI, comme Travis-CI, pour exécuter des tests.

Chers lecteurs! Quels modèles de projet Python utilisez-vous?


All Articles