Les Crash-Devs d'un Passionné

Utiliser un lint et un formateur pour python

/Catégorie/python

Temps de lecture : 3 minutes

Nous allons voir comment configurer votre éditeur de code Visual Studio Code (VSCode) pour suivre les conventions de code en python PEP8 .

Dans tous mes projets j'utilise tox qui permet d'automatiser le processus de formatage et l'intégrer à ma CI gitlab.

Pour le formatage de python j'utilise flake8, car avec tox pylint ne permet d'utiliser la configuration de ce fichier pour VSCode. J'installe la librairie en local afin de l'utiliser sur tous mes projets

clipboard
Copier le code
1
python3 -m pip install --user flake8

Dans ma configuration VSCode je mets cela

clipboard
Copier le code
1
2
3
4
5
"python.linting.enabled": true,
 "python.linting.pylintEnabled": false,
 "python.linting.flake8Enabled": true,
 "python.linting.flake8Args" : ["--config=tox.ini", "--statistics", "--count", "."],
 "python.linting.lintOnSave": true

Et dans ma configuration tox.ini de mon projet

clipboard
Copier le code
1
2
3
4
5
6
7
[flake8]
# https://pep8.readthedocs.io/en/latest/intro.html#error-codes
exclude = .pytest_cache,.tox,.vscode,build,dist,log
ignore=
 R0903
max-line-length=200 
max-complexity=10

Les informations du lint s'affiche dans l'onglet "Problems", il ne vous reste plus qu'à (tout) corriger.

Mais faire cela à la main peut-être fastidieux, dans ce cas l'outil suivant peut vous aider.

Autopep8 est un formateur qui permet de modifier vos fichiers avec option --in-place (contrairement à un linter qui vous donne uniquement des informations) selon la syntaxe de la PEP8.

clipboard
Copier le code
1
python3 -m pip install --user pep8 autopep8

J'utilise autopep8 car VSCode me fait un reformatage de mon fichier à la sauvegarde quand il est sauvegardé.

clipboard
Copier le code
1
"python.formatting.provider": "autopep8",

Il est présent dans mon fichier de configuration tox mais je préfère lancer les corrections dans mon environnement de dev plutôt qu'après (CI), les modifications automatiques pourraient avoir un impact sur l’exécution du code.

Il y a un outil hyper intéressant que le précédent ne couvre pas, c'est la suppression des packages importés mais non utilisés.

Autoflake est un script permettant notamment de supprimer les imports automatiquement avec options --remove-all-unused-imports.

clipboard
Copier le code
1
pip install --user autoflake

Ce nettoyage peut être lancé avec la commande tox -e autoflake

Mais je préfère le lancer en automatique à la sauvegarde de vos fichiers, pour cela il faut installer une extension VSCode SaveAndRunReg

clipboard
Copier le code
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
"saveAndRunReg": {
 "commands": [
   {
    "match": ".py",
    "cmd": " autoflake --in-place --recursive --remove-unused-variables --remove-all-unused-imports --exclude '__init_.py,dev.py,production.py' ${workspaceFolder}",
    "useShortcut": false,
    "silent": false
   }
  ]
 }

Il ne vous reste plus qu'à coder, et vous le ferez bien avec ces outils !