Table des matières
pylint
- Arguments à mettre par défaut
pylint --enable=all --disable=missing-module-docstring,missing-function-docstring,missing-class-docstring,locally-disabled,use-symbolic-message-instead,suppressed-message
pylint
respecte l'ordre d'entrée des paramètres. Un --enable=all
réactive les --disable
le précédent.
--indent-string="\_\_"
et --indent-after-paren=2
peuvent être utilisés pour forcer une indentation à 2 espaces. Mais Python recommande 4 espaces et sa personnalisation n'est pas supporté par Black (Configurable Indent Levels?, archive du 25/06/2018 le 04/10/2020).
--disable=locally-disabled,use-symbolic-message-instead,suppressed-message
sont pour ne pas afficher d'avertissements si des avertissements sont masqués.
- Désactiver des avertissements spécifiques
Ajouter sur la ligne problématique :
# pylint: disable=R0913
Le numéro s'obtient depuis le message d'erreur de pylint. Il est aussi possible d'avoir la liste complète avec la commande pylint --list-msgs
.
Configuration par fichier
Création du fichier de base : pylint --generate-rcfile > .pylintrc
Modification :
- .pylintrc
[MESSAGES CONTROL] enable=all disable=missing-module-docstring, missing-function-docstring, missing-class-docstring, locally-disabled, use-symbolic-message-instead, suppressed-message, bad-continuation, too-many-locals, fixme, too-few-public-methods, unsubscriptable-object, cell-var-from-loop
cell-var-from-loop
peut être intéressant,
unsubscriptable-object
a été ajouté car il crée des faux positifs unsubscriptable-object errors with Python 3.9 Archive du 22/11/2020 le 27/12/2020
bad-continuation
: pylint
peut être en conflit avec Black
.
Messages d'erreur
Unable to import
:
pylint
affiche ce message pour les sous-modules. Il faut avoir le fichier vide __init__.py
dans chaque sous-dossier ayant des fichiers python. Normalement, ce fichier n'est plus nécessaire depuis Python 3 mais pylint
continue à en avoir besoin.
mypy
Analyseur statique de code spécialisé dans le typing.
Arguments à activer, ici dans un fichier racine .mypy.ini
:
- .mypy.ini
[mypy] ignore_missing_imports = True follow_imports = silent show_column_numbers = True disallow_untyped_calls = True disallow_untyped_defs = True disallow_incomplete_defs = True check_untyped_defs = True no_implicit_optional = True warn_redundant_casts = True warn_unused_ignores = True warn_unreachable = True strict_equality = True
Il est aussi possible d'interdir l'utilisation des Any mais cela peut être problématique si on utilise une librairie avec ces propres classes et ne supporte pas le typage.
--disallow-any-unimported --disallow-any-expr --disallow-any-decorated --disallow-any-explicit --disallow-any-generics --disallow-subclassing-any
Black
Il existe 3 formateurs de code : autopep8, yapf et black. Ce dernier est le plus populaire en 2020.
La presque seule option disponible est :
--line-length=79
prospector
Un autre analyseur statique de code.
Fichier de configuration racine .prospector.yaml
:
- .prospector.yaml
strictness: veryhigh pylint: disable: - too-many-locals - too-few-public-methods - fixme pep8: disable: - W503
flake8
Il n'y a presque rien a paramétrer.
Il existe les modules Python flake8-bugbear
et flake8-import-order
.
- tox.ini
[flake8] ignore = E203, W503 application-import-names = ...,... import-order-style = google
On ignore les erreurs de formatage en conflit avec Black.
application-import-names
est utilisé par import-order
pour savoir si le module est un Third party ou interne au module.
safety
Vérifie si les paquets contenus dans un fichier requirements.txt
contiennent des failles de sécurité connues (se base sur le numéro de version).
safety check -r requirements.txt