paint-brush
Critique de livre : Outils Python hypermodernes par Claudio Jolowiczpar@usetech
493 lectures
493 lectures

Critique de livre : Outils Python hypermodernes par Claudio Jolowicz

par Usetech 7m2023/09/28
Read on Terminal Reader

Trop long; Pour lire

"Hypermodern Python Tooling" de Claudio Jolowicz est un livre à paraître, dont la sortie est prévue en avril 2024, qui fournit un guide complet des outils de développement Python. Il couvre des sujets auparavant dispersés dans diverses sources, offrant des informations approfondies sur l'installation de Python, la gestion des environnements, des packages, des dépendances et des tests. Le livre présente des outils clés tels que pipx et la poésie, en se concentrant sur l'utilisation pratique et les alternatives dans l'écosystème Python. Bien qu'il soit informatif, certains lecteurs pourraient le trouver un peu déroutant par endroits et souhaiteraient des exemples plus non triviaux. Il manque également de couverture de certains sujets tels que les gestionnaires de packages Windows, la création de Python à partir des sources sous Unix, l'exécution de Python dans des conteneurs Docker, la création de fichiers .exe sous Windows, les méthodes alternatives de distribution de projets et les linters. Malgré cela, il est recommandé aux passionnés de Python à la recherche d’une ressource complète.
featured image - Critique de livre : Outils Python hypermodernes par Claudio Jolowicz
Usetech  HackerNoon profile picture
0-item



J'ai eu la chance de lire une première version de « Hypermodern Python Tooling » de Claudio Jolowicz, dont la sortie est prévue pour avril 2024. J'ai lu la version de juin 2023 et j'étais motivé pour écrire une critique car je n'ai pas trouvé de livre. sur ce sujet précédemment.


Source : O'Reilly Media, Inc.


Les sujets abordés dans le livre n'étaient auparavant disponibles que dans des vidéos de conférence, des articles techniques et des didacticiels, selon qui est le plus à l'aise avec quel type de contenu. À mon avis, selon d’autres sources, si l’on prête attention à ces questions, elle est très superficielle. Il s'agit généralement de diverses variantes de l'installation de l'interpréteur Python lui-même.


Depuis juin 2023, le livre en accès anticipé comprend 7 sections :


  • Installation de Python ;
  • Environnements en Python ;
  • Forfaits en Python ;
  • Gestion des dépendances ;
  • Suivi avec poésie ;
  • Test avec Pytest ;
  • Mesurer la couverture avec Coverage.py


Aperçu des sections du livre

La première section décrit le cycle de publication du versioning Python. Il décrit différentes méthodes d'installation pour différents systèmes d'exploitation : Windows, Linux , macOS, l'utilisation de pyenv pour installer de nombreuses versions d'interpréteurs Python, non seulement basées sur CPython, mais aussi PyPy, IronPython, Jython, Pyston et autres. Un exemple d'utilisation de pylauncher, également pour les systèmes Unix, est donné. Alternativement, un exemple d'installation utilisant Anaconda est donné.


La deuxième section explique comment l'environnement Python est organisé : interpréteur, scripts de point d'entrée, modules (comprenant à la fois la bibliothèque standard et les modules tiers) et bibliothèques partagées (contenant du code personnalisé compilé à partir de langages de bas niveau tels que C). L'utilisation d'environnements virtuels, qui peuvent être créés à l'aide du module venv intégré introduit dans Python3, est mentionnée, ainsi que les différences dans leur activation pour différents systèmes d'exploitation. Le gestionnaire de packages est introduit, à la fois le pip intégré et le pipx tiers. Des informations générales sur la manière de rechercher des modules sont fournies.


La troisième section présente l'index du package Python. Nous donnons un exemple de script simple et montrons l'ensemble du flux de travail, depuis la création d'un projet jusqu'à son chargement dans les index de test et de package réel. Le fichier pyproject.toml est utilisé pour spécifier des méta-informations lors de la création d'un package d'application. Une trappe de gestionnaire de projet moderne et conforme aux normes (https://hatch.pypa.io/latest/) est utilisée comme backend de construction. L'outil de téléchargement officiel de PyPI : Twine est utilisé comme outil de téléchargement de packages. Les options de package sont répertoriées : SDISTES et roues. Une liste des champs les plus essentiels contenant des méta-informations dans le fichier pyproject.toml pour un projet est donnée.


La quatrième section soulève probablement le problème le plus ambigu : celui de la gestion des dépendances dans un projet. Il existe deux options : conditions.txt avec des variations et combinaisons possibles, et pyproject.toml. Étonnamment, il n'y aura pas ici d'histoire sur la poésie, mais sa description ne tardera pas dans la cinquième section. Il était assez intéressant de découvrir l'existence d'un outil permettant de générer ce qu'on appelle le locus de dépendance à l'aide de l'outil pip-tools.

La cinquième section traite de la poésie bien connue, qui fournit un outil automatisé pour les tâches de routine : gestion des dépendances, création d'un package et publication dans l'index du package, etc. Les différences avec pyproject sont décrites. Nous décrivons les différences entre pyproject.toml et ce qui a été décrit dans les chapitres précédents lorsque nous nous sommes familiarisés avec sa syntaxe. Il existe des alternatives à la poésie dans l'écosystème Python, comme Hatch et Maturin.

La section six décrit un court kmb (cours pour jeunes combattants) sur les tests avec des éléments de refactoring pour les développeurs Python, mentionnant deux frameworks de test : unittest et pytest. Ce sont les bases, mais d'autres sources avec des descriptions plus détaillées du sujet sont également fournies pour approfondir. La seule chose qui n'est pas mentionnée est le nez, mais dans la pratique, pytest a été le leader de facto ces dernières années. Dans le cas de contraintes de dépendance, le choix est évident : unittest. Un exemple de code de mini-refactorisation pour créer une base plus flexible pour la prise en charge future du code et simplifier les tests est donné.


Dans la septième section , nous abordons la question de la couverture des tests en utilisant le module de trace standard ainsi que le module de couverture tiers. Mais il est toujours recommandé d'utiliser le module tiers, qui peut être exécuté sur différentes versions de l'interpréteur Python, puis d'obtenir un rapport combiné sur la couverture du code en suivant l'exécution de la couverture des règles → combinaison de couverture → rapport de couverture. Finalement, tout le monde est confronté à un dilemme à un moment donné sur un projet : « Pour tester, vous devez refactoriser le code ; mais refactoriser sans tests est trop risqué ».


Ici, très probablement, tout dépendra du projet lui-même, de sa portée, de la qualité du code lui-même et de la disponibilité des tests en tant que tels. Il me semble qu'il faut adopter une approche pragmatique et qu'il ne faut pas toujours atteindre une référence à 100%, ce n'est souvent pas obligatoire. Très probablement, au moment de lire ceci, le chapitre sur l'automatisation de toute l'histoire à l'aide de l'outil Nox n'était pas encore prêt.


Avant de résumer, installons pipx et essayons de l'utiliser.


PIPX en action

Sur le site officiel, les développeurs de l'outil le positionnent ainsi :

« Vue d'ensemble : qu'est-ce que pipx ?


pipx est un outil pour vous aider à installer et exécuter des applications d'utilisateur final écrites en Python. C'est à peu près similaire au Brew de macOS, au npx de JavaScript et à l'apt de Linux.


C'est étroitement lié à pip. En fait, il utilise pip, mais se concentre sur l'installation et la gestion de packages Python qui peuvent être exécutés directement à partir de la ligne de commande en tant qu'applications.


C'est une excellente nouvelle si le package est également livré avec une interface CLI , car il sera possible d'exécuter le package souhaité directement, avec une seule commande, sans pré-installation. Bonjour à l'outil npx du monde NodeJS ;)

Après avoir installé pipx localement, exécutons 5 petits projets pour voir à quel point c'est rapide et facile.


  1. Utilitaire pour générer des fichiers audio à partir du texte Google-Speech


Dans la console, exécutez la commande suivante : $ pipx run google-speech -l en -o hello_world.mp3 "Hello, world!"


Dans ce cas, le fichier hello_world.mp3 est créé dans le répertoire où la commande a été exécutée, et peut être écouté avec un lecteur multimédia.



  1. Utilitaire de calcul des sommes de contrôle des fichiers et répertoires chksum-cli


Dans la console, exécutez la commande suivante : $ pipx run chksum-cli ./hello_world.mp3 b754e299a96327caaddd44b453f66ed9439c5d64d0d6e55c7e32471115757e5e sha256


Le résultat sera affiché, que les sommes de contrôle des fichiers correspondent ou non.


  1. Utilitaire d'envoi de requêtes via le protocole HTTP httpy-cli


Dans la console, exécutez la commande suivante : $ pipx run httpy-cli mail.ru


Une réponse HTTP avec les en-têtes et le corps de la requête sera générée.



  1. Un utilitaire pour afficher une horloge pseudo-graphique dans la console avec la possibilité de définir un timer Timy-cli


Dans la console, exécutez la commande suivante : $ pipx run timy-cli -с


Une horloge analogique s'affichera, avec la possibilité de l'arrêter à l'aide de la combinaison de touches CTRL + C.



  1. Jeu d'échecs sur console avec possibilité de jouer en réseau cli-chess


Dans la console, exécutez la commande suivante : $ pipx run cli-chess


Un menu de sélection du type de jeu s'ouvrira :




Pour afficher des options supplémentaires, vous pouvez ajouter la touche --help aux commandes ci-dessus.


Impressions du livre


Dans l'ensemble, le livre est facile à lire, mais un peu déroutant par endroits. Il lui manque peut-être quelques exemples non triviaux. Le livre décrit un exemple de script pour récupérer un article aléatoire de Wikipédia.


Ce que j'ai aimé :


Personnellement, j'ai découvert l'outil pipx (analogue à npx dans le monde Node.js), qui s'avère très pratique lorsqu'il faut se familiariser rapidement avec quelque chose et y jeter un œil. Particulièrement adapté aux projets où il existe une interface CLI à exécuter ;


C'était intéressant d'apprendre qu'il existe des alternatives à la poésie (https://python-poetry.org/), comme Hatch (https://hatch.pypa.io/latest/) et Maturin (https://www. maturin.rs/);


Exemple d'utilisation de rétroportages pour différentes versions de l'interpréteur Python ; par exemple, importlib_metadata est utilisé comme backport pour Python3.7, par opposition à importlib.metadata pour Python3.8. Exemple de code du livre :


try:

from importlib.metadata import metadata

except ImportError:

from importlib_metadata import metadata


Ce qui, à mon avis, manque dans le livre :


La possibilité d'utiliser un gestionnaire de packages pour installer Python sur la famille de systèmes d'exploitation Windows, telle que chocolatey (https://chocolatey.org/) n'est pas couverte ;


La manière de construire Python à partir des sources pour les distributions Unix n'est pas abordée ;


Aucun moyen d'exécuter Python dans un conteneur Docker. Il existe désormais de nombreuses constructions, à commencer par la plus minimaliste basée sur l'alpin ;


La manière d'amener le projet à exécuter le fichier exécutable .exe sous Windows n'a pas été envisagée (dans ma pratique, il y a eu un tel cas. Oui, je suis d'accord que c'est une tâche très niche, mais quand même) ;

Aucun exemple de distribution de projet alternative, par exemple en utilisant le gestionnaire de paquets standard adapté aux distributions de type Debian avec l'aide de setuptools et de dh-virtualenv avec la formation de paquets *.deb) ;


Aucun chapitre décrivant les linters comme pylint, flake8, isort, black, mypy, pyright, etc.


Mais c'est mon opinion subjective, vous n'êtes peut-être pas d'accord.

Malgré le fait que le livre n’est pas encore dans sa version finale (sortie prévue en avril 2024), je peux le recommander à toute personne intéressée par Python.


Auteur : Daniil Nikitin, développeur de logiciels senior chez Usetech