autopep8 formate automatiquement le code Python pour se conformer au guide de style PEP 8. Il utilise l'utilitaire pycodestyle pour déterminer quelles parties du code doivent être formatées. autopep8 est capable de résoudre la plupart des problèmes de formatage pouvant être signalés par pycodestyle.
Contenu
Installation
Exigences
Usage
Caractéristiques
Utilisation plus avancée
Désactivation ligne par ligne
Utiliser comme module
Configuration
pyproject.toml
Utilisation avec pré-commit
Essai
Dépannage
pkg_resources.DistributionNotFound
Links
De pip :
$ pip install --upgrade autopep8
Pensez à utiliser l'option --user
.
autopep8 nécessite pycodestyle.
Pour modifier un fichier en place (avec niveau agressif 2) :
$ autopep8 --in-place --aggressive --aggressive
Avant d'exécuter autopep8.
import math, sys;def example1():####Ceci est un long commentaire. Cela doit être enveloppé pour tenir dans 72 caractères.some_tuple=( 1,2, 3,'a' );some_variable={'long':'Les lignes de code longues doivent être enveloppées dans 79 caractères.','other':[math .pi, 100,200,300,9876543210,'Ceci est une longue chaîne qui continue'],'more':{'inner':'Toute cette chaîne logique la ligne doit être enveloppée.',some_tuple:[1,20,300,40000,500000000,60000000000000000]}}return (some_tuple, some_variable)def example2() : return {'has_key() est deprecated':True}.has_key({'f':2}.has_key(''));class Exemple3( object ):def __init__ ( self, bar ): #Les commentaires doivent avoir un espace après le hachage. si barre : barre+=1; barre=barre* barre ; return bar else:some_string = """ L'indentation dans les chaînes multilignes ne doit pas être modifiée. Seul le code réel doit être réindenté. """return (sys.path, some_string)
Après avoir exécuté autopep8.
import mathimport sysdef example1():# Ceci est un long commentaire. Cela doit être enveloppé pour tenir dans 72 # caractères.some_tuple = (1, 2, 3, 'a')some_variable = {'long': 'Les lignes de code longues doivent être enveloppées dans 79 caractères.','other': [math .pi,100,200,300,9876543210,'Ceci est une longue chaîne qui continue'],'more': {'inner': 'Tout cela la ligne logique doit être enveloppée.',some_tuple: [1,20,300,40000,500000000,60000000000000000]}}return (some_tuple, some_variable)def example2(): return ('' in {'f': 2}) in {' has_key() est obsolète' : True}class Exemple3(objet):def __init__(self, bar):# Les commentaires doivent avoir un espace après le hachage.if bar:bar += 1bar = bar * barreturn barelse:some_string = """ L'indentation dans les chaînes multilignes ne doit pas être touchée. Seul le code réel doit être réindenté ."""retour (sys.path, some_string)
Possibilités :
utilisation : autopep8 [-h] [--version] [-v] [-d] [-i] [--global-config filename] [--ignore-local-config] [-r] [-j n] [-p n] [-a] [--experimental] [--exclude globs] [--list-fixes] [--ignorer les erreurs] [--select erreurs] [--max-line-length n] [--line-range ligne ligne] [--hang-closing] [--exit-code] [fichiers [fichiers...]] Formate automatiquement le code Python pour se conformer au guide de style PEP 8. arguments de position : fichiers fichiers à formater ou '-' pour standard en arguments facultatifs : -h, --help afficher ce message d'aide et quitter --version affiche le numéro de version du programme et quitte -v, --verbose affiche des messages détaillés ; plusieurs -v donnent plus messages verbeux -d, --diff affiche la différence pour la source fixe -i, --in-place apporter des modifications aux fichiers en place --global-config nom du fichier chemin vers un fichier de configuration pep8 global ; si ce fichier le fait n'existe pas alors ceci est ignoré (par défaut : ~/.config/pep8) --ignore-local-config ne recherchez pas et n'appliquez pas de fichiers de configuration locaux ; sinon passé, les valeurs par défaut sont mises à jour avec tous les fichiers de configuration dans le répertoire racine du projet -r, --recursive s'exécute de manière récursive sur les répertoires ; doit être utilisé avec --in-place ou --diff -j n, --jobs n nombre de tâches parallèles ; correspond au nombre de processeurs si la valeur est moins de 1 -p n, --pep8-passes n nombre maximum de passes pep8 supplémentaires (par défaut : infini) -a, --aggressive active les modifications sans espaces ; multiple -un résultat dans des changements plus agressifs --experimental activer les correctifs expérimentaux --exclude globs exclut les noms de fichiers/répertoires qui correspondent à ces virgules- globes séparés --list-fixes répertorie les codes pour les correctifs ; utilisé par --ignore et --select --ignore les erreurs ne corrigent pas ces erreurs/avertissements (par défaut : E226, E24, W50, W690) --select error corrige uniquement ces erreurs/avertissements (par exemple E4,W) --max-line-length n définit la longueur de ligne maximale autorisée (par défaut : 79) --line-range ligne ligne, --range ligne ligne corrigez uniquement les erreurs trouvées dans cette plage inclusive de numéros de ligne (par exemple 1 99); les numéros de ligne sont indexés à 1 --hang-closing option de fermeture de blocage passée à pycodestyle --exit-code change le comportement du code de sortie. comportement par défaut de valeur de retour, 0 n'est aucune différence, 1 est une sortie d'erreur. renvoie 2 lorsque vous ajoutez cette option. 2 existe différences.
autopep8 corrige les problèmes suivants signalés par pycodestyle :
E101 - Réindenter toutes les lignes. E11 - Correction de l'indentation. E121 - Correction de l'indentation pour qu'elle soit un multiple de quatre. E122 - Ajouter une indentation absente pour une indentation suspendue. E123 - Alignez le support de fermeture sur le support d'ouverture. E124 - Alignez le support de fermeture pour qu'il corresponde à l'indentation visuelle. E125 - Retrait pour distinguer la ligne de la ligne logique suivante. E126 - Correction d'une indentation suspendue trop en retrait. E127 - Correction de l'indentation visuelle. E128 - Correction de l'indentation visuelle. E129 - Correction de l'indentation visuelle. E131 - Correction du retrait suspendu pour la ligne de continuation non alignée. E133 - Correction de l'indentation manquante pour le support de fermeture. E20 - Supprimez les espaces superflus. E211 - Supprimer les espaces superflus. E22 - Correction des espaces superflus autour des mots-clés. E224 - Supprimez les espaces superflus autour de l'opérateur. E225 - Correction des espaces manquants autour de l'opérateur. E226 - Correction des espaces manquants autour de l'opérateur arithmétique. E227 - Correction des espaces manquants autour de l'opérateur bitwise/shift. E228 - Correction des espaces manquants autour de l'opérateur modulo. E231 - Ajouter des espaces manquants. E241 - Correction des espaces superflus autour des mots-clés. E242 - Supprimez les espaces superflus autour de l'opérateur. E251 - Supprimez les espaces autour du signe '=' du paramètre. E252 - Espace manquant autour du paramètre égal. E26 - Correction de l'espacement après le hachage des commentaires pour les commentaires en ligne. E265 - Correction de l'espacement après le hachage des commentaires pour les commentaires de bloc. E266 - Correction d'un trop grand nombre de « # » pour bloquer les commentaires. E27 - Correction des espaces superflus autour des mots-clés. E301 - Ajouter une ligne vide manquante. E302 - Ajoutez les 2 lignes vides manquantes. E303 - Supprimez les lignes vides supplémentaires. E304 - Supprimer la ligne vide suivant le décorateur de fonction. E305 - 2 lignes vides attendues après la fin de la fonction ou de la classe. E306 - 1 ligne vide attendue avant une définition imbriquée. E401 - Placer les importations sur des lignes distinctes. E402 - Correction de l'importation au niveau du module qui ne se trouve pas en haut du fichier E501 - Essayez de faire en sorte que les lignes tiennent entre les caractères --max-line-length. E502 - Supprimer l'échappement superflu de la nouvelle ligne. E701 - Placez l'instruction composée séparée par deux points sur des lignes distinctes. E70 - Placez les instructions composées séparées par des points-virgules sur des lignes distinctes. E711 - Correction de la comparaison avec Aucun. E712 - Correction de la comparaison avec le booléen. E713 - Utilisez « pas présent » pour tester l'adhésion. E714 - Utiliser le test « n'est pas » pour l'identité de l'objet. E721 - Utilisez "isinstance()" au lieu de comparer directement les types. E722 - Correction nue sauf. E731 - Utilisez une définition lorsque vous n'attribuez pas d'expression lambda. W291 - Supprimer les espaces de fin. W292 - Ajoutez une seule nouvelle ligne à la fin du fichier. W293 - Supprime les espaces de fin sur une ligne vide. W391 - Supprimer les lignes vides de fin. W503 - Correction du saut de ligne avant l'opérateur binaire. W504 - Correction du saut de ligne après l'opérateur binaire. W605 - Correction d'une séquence d'échappement 'x' invalide.
autopep8 corrige également certains problèmes non trouvés par pycodestyle.
Normalisez les fichiers avec des fins de lignes mixtes.
Mettez une ligne vide entre une classe docstring et sa première déclaration de méthode. (Activé avec E301
.)
Supprimez les lignes vides entre une déclaration de fonction et sa docstring. (Activé avec E303
.)
autopep8 évite de résoudre certains problèmes détectés par pycodestyle.
E112
/ E113
pour les non-commentaires sont des rapports de mauvaise indentation qui enfreignent les règles de syntaxe. Ceux-ci ne doivent absolument pas être modifiés.
E265
, qui fait référence à l'espacement après le hachage du commentaire, est ignoré si le commentaire ressemble à du code. autopep8 évite de les modifier car ce ne sont pas de vrais commentaires. Si vous voulez vraiment vous débarrasser de l'avertissement pycodestyle, envisagez simplement de supprimer le code commenté. (Cela peut être automatisé via Eradicate.)
Par défaut, autopep8 n'apporte que des modifications aux espaces. Ainsi, par défaut, il ne corrige pas E711
et E712
. (Changer x == None
en x is None
peut changer la signification du programme si x
a sa méthode __eq__
remplacée.) Cela ne corrige pas non plus le code obsolète W6
. Pour activer ces correctifs plus agressifs, utilisez l'option --aggressive
:
$ autopep8 --agressif
Utilisez plusieurs --aggressive
pour augmenter le niveau d'agressivité. Par exemple, E712
nécessite le niveau d'agressivité 2 (puisque x == True
peut être remplacé par x
ou x is True
, mais autopep8 choisit le premier).
--aggressive
raccourcira également les lignes de manière plus agressive. Cela supprimera également les espaces de fin de manière plus agressive. (Habituellement, nous ne touchons pas aux espaces de fin dans les docstrings et autres chaînes multilignes. Et pour apporter des modifications encore plus agressives aux docstrings, utilisez docformatter.)
Pour activer uniquement un sous-ensemble de correctifs, utilisez l'option --select
. Par exemple, pour résoudre différents types de problèmes d'indentation :
$ autopep8 --select=E1,W1
Si le fichier en cours de réparation est volumineux, vous souhaiterez peut-être activer les messages de progression détaillés :
$ autopep8 -v
Passer --experimental
active la fonctionnalité suivante :
Raccourcit les lignes de code en tenant compte de sa longueur
$ autopep8 --experimental
Il est possible de désactiver autopep8 jusqu'à ce qu'il soit réactivé dans le fichier, en utilisant autopep8: off
puis en le réactivant avec autopep8: on
.
# autopep8 : désactivé[ [23, 23, 13, 43], [32, 34, 34, 34], [56, 34, 34, 11], [10, 10, 10, 10], ]# autopep8 : activé
fmt: off
et fmt: on
sont également valides.
La manière la plus simple d'utiliser autopep8 en tant que module consiste à utiliser la fonction fix_code()
:
>>> importer autopep8 >>> autopep8.fix_code('x= 123n') 'x = 123n'
Ou avec options :
>>> importer autopep8 >>> autopep8.fix_code('print( 123 )n', ... options={'ignorer' : ['E']}) 'imprimer( 123 )n'
Par défaut, si $HOME/.config/pycodestyle
( ~.pycodestyle
dans l'environnement Windows) existe, il sera utilisé comme fichier de configuration global. Vous pouvez également spécifier le fichier de configuration globale avec l'option --global-config
.
De plus, si les fichiers setup.cfg
, tox.ini
, .pep8
et .flake8
existent dans le répertoire où existe le fichier cible, il sera utilisé comme fichier de configuration.
pep8
, pycodestyle
et flake8
peuvent être utilisés comme section.
exemple de fichier de configuration :
[style pycode] max_line_length = 120 ignorer = E501
autopep8 peut également utiliser pyproject.toml
. La section doit être [tool.autopep8]
et pyproject.toml
a priorité sur tout autre fichier de configuration.
exemple de fichier de configuration :
[outil.autopep8] max_line_length = 120 ignorer = "E501,W6" # ou ["E501", "W6"] sur place = vrai récursif = vrai agressif = 3
autopep8 peut être utilisé comme hook pour le pré-commit.
Pour ajouter autopep8 en tant que plugin, ajoutez cette définition de dépôt à votre configuration :
dépôts : - repo : https://github.com/hhatto/autopep8rev : ... # sélectionnez la balise ou la révision souhaitée, ou exécutez les hooks `pre-commit autoupdate` : - identifiant : autopep8
Les cas de test se trouvent dans test/test_autopep8.py
. Ils peuvent être exécutés directement via python test/test_autopep8.py
ou via tox. Ce dernier est utile pour tester plusieurs interpréteurs Python. (Nous testons actuellement sur les versions 3.8, 3.9, 3.10, 3.11 et 3.12 de CPython. Nous testons également sur PyPy.)
Des tests à large spectre sont disponibles via test/acid.py
. Ce script exécute autopep8 sur le code Python et vérifie l'exactitude et l'exhaustivité des correctifs de code. Il peut vérifier que le bytecode reste identique. test/acid_pypi.py
utilise acid.py
pour tester les derniers packages publiés sur PyPI.
pkg_resources.DistributionNotFound
Si vous utilisez une ancienne version de setuptools
, vous pourriez rencontrer pkg_resources.DistributionNotFound
lorsque vous essayez d'exécuter autopep8
. Essayez de mettre à niveau setuptools
pour contourner ce problème setuptools
:
$ pip install --upgrade setuptools
Utilisez sudo
si vous effectuez l'installation sur le système.
PyPI
GitHub
Codecov