Je sais qu'il existe des outils permettant de vérifier si votre code Python est conforme à PEP8. Par exemple, il existe un service en ligne } et un module python .
Cependant, je ne trouve pas de service ou de module qui puisse convertir mon fichier Python en fichier Python autonome et valide pour PEP8. Est-ce que quelqu'un sait s'il y en a?
Je suppose que c’est faisable puisque PEP8 concerne l’apparence du code, non?
Malheureusement, "pep8 storming" (l'ensemble du projet) a plusieurs effets secondaires négatifs:
En guise d'alternative (et grâce à @ y-p pour l'idée ), j'ai écrit un petit paquetage qui autopep8 ne contient que les lignes sur lesquelles vous avez travaillé depuis le dernier commit/branch:
pip install pep8radius
Supposons que vous ayez effectué votre travail hors de master
et que vous êtes prêt à vous engager:
# be somewhere in your project directory
# see the diff with pep, see the changes you've made since master
pep8radius master --diff
# make those changes
pep8radius master --diff --in-place
Ou pour nettoyer les nouvelles lignes que vous avez validées depuis le dernier commit:
pep8radius --diff
pep8radius --diff --in-place
# the lines which changed since a specific commit `git diff 98f51f`
pep8radius 98f51f --diff
Fondamentalement pep8radius
applique autopep8 aux lignes de la sortie de git/hg diff (de le dernier commit partagé ).
Ce script fonctionne actuellement avec git et hg, si vous utilisez autre chose et voulez que cela fonctionne merci de poster un commentaire/numéro/PR !
Vous pouvez utiliser autopep8 ! Pendant que vous préparez vous-même une tasse de café, cet outil supprime toutes les violations embêtantes de PEP8 qui ne changent pas le sens du code.
Installez-le via pip:
pip install autopep8
Appliquez ceci à un fichier spécifique:
autopep8 py_file --in-place
ou à votre projet (récursivement), l'option verbose vous donne quelques informations sur son déroulement:
autopep8 project_dir --recursive --in-place --pep8-passes 2000 --verbose
Note: Parfois, le nombre par défaut de 100 passes ne suffit pas, je le règle sur 2000 car il est raisonnablement élevé et intercepte tous les fichiers, sauf les plus problématiques (il cesse de passer dès qu'il ne détecte plus d'infractions pep8 résolvables) ...
Si vous voulez "complet" conformité PEP8: une tactique que j'ai utilisée consiste à exécuter autopep8 comme ci-dessus, puis à exécuter PEP8, qui affiche les violations restantes (fichier, numéro de ligne et autres):
pep8 project_dir --ignore=E501
et modifiez-les manuellement individuellement (par exemple, E712 - comparaison avec un booléen).
Note: autopep8 propose un argument --aggressive
(pour impitoyablement "corriger" ces violations de sens changeantes), mais méfiez-vous si vous utilisez agressif, vous devrez peut-être déboguer ... (par exemple, dans numpy/pandas True == np.bool_(True)
mais pas True is np.bool_(True)
!)
pep8 --quiet --statistics .
Remarque: Je considère que les E501 (lignes trop longues) constituent un cas particulier, car il y en aura probablement beaucoup dans votre code et, parfois, elles ne sont pas corrigées par autopep8.
A titre d'exemple, j'ai appliqué cette technique à la base de code pandas .
@Andy Hayden a donné un bon aperçu de autopep8. En plus de cela, il existe un autre paquet appelé pep8ify qui fait également la même chose.
Cependant, les deux packages ne peuvent supprimer que les erreurs de filtre mais ils ne peuvent pas formater le code.
little = more[3: 5]
Le code ci-dessus reste le même après le pep8ifying également. Mais le code n'a pas encore l'air bon. Vous pouvez utiliser des outils de formatage tels que yapf , qui formateront le code même s'il est conforme à PEP8. Le code ci-dessus sera formaté pour
little = more[3:5]
Parfois, cela détruit même votre formatage manuel. Par exemple
BAZ = {
[1, 2, 3, 4],
[5, 6, 7, 8],
[9, 10, 11, 12]
}
sera converti en
BAZ = {[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12]}
Mais vous pouvez lui dire d'ignorer certaines parties.
BAZ = {
[1, 2, 3, 4],
[5, 6, 7, 8],
[9, 10, 11, 12]
} # yapf: disable
Tiré de mon ancien article de blog: Automatiquement PEP8 & Formate Your Code Python!
Si vous utilisez Eclipse + PyDev, vous pouvez simplement activer autopep8 à partir des paramètres de PyDev: Windows -> Préférences -> tapez "autopep8" dans le filtre de recherche.
Cochez la case "utiliser autopep8.py pour le formatage du code?" -> ok
Maintenant, le formatage du code CTRL-SHIFT-F d’Eclipse devrait formater votre code en utilisant autopep8 :)
Il y en a beaucoup.
Les IDE ont généralement une capacité de formatage intégrée. IntelliJ Idea/PyCharm le fait, il en va de même pour le plug-in Python pour Eclipse, etc.
Certains formateurs/linters peuvent cibler plusieurs langues. https://coala.io est un bon exemple de ceux-ci.
Ensuite, il y a les outils à usage unique, dont beaucoup sont mentionnés dans d'autres réponses.