Projets Python avec Poetry et VSCode Partie 2 - Aide-mémoire Python

Dans le premier article, nous avons appris ce qu’est le fichier pyproject.toml et comment travailler avec, utilisé Poetry pour démarrer un nouveau projet, créer un environnement virtuel et pour ajouter et supprimer des dépendances. Tout cela avec les commandes suivantes :
| Command | Description |
|---|---|
poetry new [package-name] | Démarrer un nouveau projet Python. |
poetry init | Créer un fichier pyproject.toml de manière interactive. |
poetry install | Installer les paquets dans le fichier pyproject.toml. |
poetry add [package-name] | Ajouter un paquet à un environnement virtuel. |
poetry add -D [package-name] | Ajouter un paquet de développement à un environnement virtuel. |
poetry remove [package-name] | Supprimer un paquet d’un environnement virtuel. |
poetry remove -D [package-name] | Supprimer un paquet de développement d’un environnement virtuel. |
Dans cette deuxième partie, nous allons :
- Ajouter notre environnement virtuel à VSCode.
- Mettre à jour nos dépendances.
- Intégrer nos dépendances de développement avec l’éditeur :
- Flake8
- Black
- Pytest
Et dans un troisième article, nous écrirons une bibliothèque d’exemple, construirons notre projet avec Poetry et le publierons sur PyPI.
Avant de commencer, assurez-vous d’avoir installé VSCode, ajouté l’extension Python et d’avoir suivi et compris le premier article de cette série.
Configuration de Poetry sur VSCode
Quelques jours se sont écoulés depuis la première partie, il pourrait donc être judicieux de vérifier les nouvelles versions de nos dépendances. Ouvrez votre terminal, naviguez à l’intérieur du répertoire de votre projet et tapez la commande poetry update :

Jusqu’à présent, aucune nouvelle version n’est disponible.
Lorsque vous créez un environnement virtuel avec la commande venv, VSCode le définit automatiquement comme l’environnement Python par défaut pour ce projet. Lorsque vous travaillez avec Poetry, la première fois, nous devrons taper ce qui suit dans le terminal et à l’intérieur du dossier du projet :
poetry shell
code .
La première commande, poetry shell, nous fera entrer dans notre environnement virtuel, et code . ouvrira le dossier actuel à l’intérieur de VSCode.

Ouvrez le dossier how-long (ou celui portant le nom de votre projet) via le panneau de gauche et, à côté de __init__.py, créez un fichier how-long.py. Dans le coin inférieur gauche, vous verrez l’environnement Python actuel :

Cliquez dessus et une liste des environnements disponibles s’affichera. Choisissez celui qui porte le nom de votre projet :

Maintenant, intégrons nos dépendances de développement, Flake8, Black et Pytest dans Visual Studio Code.
Flake8
Flake8 fournira à nos projets des capacités de linting. En d’autres termes, il signalera les erreurs de syntaxe et de style, et grâce à VSCode, nous les connaîtrons au fur et à mesure que nous tapons.
Par défaut, l’extension Python est livrée avec Pylint activé, ce qui est puissant mais complexe à configurer. Pour passer à Flake8, modifiez n’importe quel fichier Python et enregistrez-le. Dans le coin inférieur droit, un message contextuel s’affichera :

Cliquez sur Select Linter et choisissez Flake8 dans la liste. Maintenant, VSCode nous indiquera nos problèmes de syntaxe et de style, en vert ou en rouge selon leur gravité, toujours avec une description claire de ce qui ne va pas :

Il semble que nous ayons deux problèmes : il nous manque une ligne vide à la fin de notre fichier (style) et nous avons oublié d’ajouter des guillemets à notre chaîne de caractères Hello, World! (syntaxe). Corrigez-les et voyez tous les avertissements disparaître.
Black
Black est un formateur de code, un outil qui examinera notre code et le formatera automatiquement conformément au guide de style PEP 8, le même PEP que Flake8 utilise pour vérifier nos erreurs de style.
Maintenez shift + cmd/ctrl + p pour ouvrir la palette de commandes, tapez Format Document, et appuyez sur Entrée. Un nouveau message contextuel apparaîtra :

Sélectionnez Use Black. Copiez maintenant ce code mal formaté dans votre fichier python :
for i in range(5): # this comment has too many spaces
print(i) # this line has 6 space indentation.
Quel laid morceau de m***… de code. Essayez de le formater à nouveau et voyez comment Black corrige tous les problèmes pour vous !
Une autre chose que nous pouvons faire est de configurer VSCode afin que chaque fois que nous sauvegardons, Black formate automatiquement notre code. Maintenez cmd/ctrl + , pour ouvrir les paramètres. Assurez-vous d’être dans les Workspace Settings, recherchez Format On Save et activez la case à cocher :

Enfin, Black utilise par défaut 88 caractères par ligne, contrairement aux 80 autorisés par Flake8. Pour éviter les conflits, ouvrez le dossier .vscode et ajoutez ce qui suit à la fin du fichier settings.json :
{
...
"python.linting.flake8Args": [
"--max-line-length=88"
],
}

Pytest
Si vous êtes sérieux dans votre programmation, il est crucial pour vous d’apprendre à tester vos projets. C’est une compétence incroyablement utile qui vous permet d’écrire et de livrer des programmes en toute confiance en réduisant la possibilité que des bugs catastrophiques apparaissent après la livraison.
Pytest est un framework très populaire et convivial pour l’écriture de tests. Nous l’avons déjà installé, nous allons donc également l’intégrer avec VSCode.
Ouvrez le dossier tests et sélectionnez le fichier test_how_long.py. Poetry nous donne déjà notre premier test :
# test_how_long.py
from how_long import __version__
def test_version():
assert __version__ == '0.1.0'
Dans ce test, nous importons la variable __version__ du fichier __init__.py qui se trouve dans le dossier how_long et nous affirmons que la version actuelle est 0.1.0. Ouvrez le terminal intégré en allant dans Terminal > New Terminal et tapez :
pytest
Le résultat ressemblera à ceci :

Ok, tout va bien. Ouvrez votre palette de commandes avec shift + cmd/ctrl + p :
- Écrivez unit et sélectionnez Python: Configure Unit Tests.
- Sélectionnez pytest.
- Choisissez le répertoire dans lequel vous avez enregistré les tests, tests dans notre cas.
Trois choses se sont produites :
Un nouveau bouton est apparu dans la barre d’état : Run Tests. C’est la même chose que de taper pytest dans le terminal. Appuyez dessus et sélectionnez Run All Unit Tests. Une fois terminé, il vous indiquera le nombre de tests qui ont réussi et ceux qui ont échoué :

Une nouvelle icône dans la barre de gauche. Si vous cliquez dessus, un panneau affichant tous les tests apparaîtra. Ici, vous pouvez exécuter chacun individuellement :

À l’intérieur du fichier de test, de nouvelles options s’afficheront avant chaque fonction de test : une icône de coche apparaîtra si tout va bien, et un x sinon. Cela vous permet également d’exécuter des tests spécifiques :

Conclusion
Jusqu’à présent, nous avons :
- Démarré un nouveau projet, créé un environnement virtuel, et ajouté, supprimé et mis à jour des dépendances.
- Ajouté notre environnement virtuel à VSCode, configuré Flake8 pour analyser notre code pendant que nous tapons, sélectionné Black comme formateur et inclus Pytest pour exécuter nos tests visuellement.
Enfin, dans le troisième et dernier article, nous allons :
- Écrire une bibliothèque d’exemple.
- Construire notre projet avec Poetry.
- Le publier sur PyPI.