Je sais qu'il existe des outils qui valident si votre code Python est conforme à PEP8, par exemple, il existe à la fois un service en ligne et un module python .
Cependant, je ne trouve pas de service ou de module capable de convertir mon fichier Python en un fichier Python valide PEP8 autonome. Est-ce que quelqu'un sait s'il y en a?
Je suppose que c'est faisable puisque PEP8 concerne uniquement l'apparence du code, non?
python
coding-style
pep8
Chen Xie
la source
la source
Réponses:
Malheureusement, "pep8 storming" (l'ensemble du projet) a plusieurs effets secondaires négatifs:
Comme alternative (et merci à @yp pour l'idée ), j'ai écrit un petit paquet qui autopep8s uniquement les lignes sur lesquelles vous travaillez depuis le dernier commit / branch:
Fondamentalement, laisser le projet un peu mieux que vous ne l'avez trouvé :
Supposons que vous ayez terminé votre travail
master
et que vous soyez prêt à vous engager:Ou pour nettoyer les nouvelles lignes que vous avez validées depuis le dernier commit:
Fondamentalement,
pep8radius
applique autopep8 aux lignes dans la sortie de git / hg diff (à partir du dernier commit partagé ).Ce script fonctionne actuellement avec git et hg, si vous utilisez autre chose et que vous voulez que cela fonctionne, veuillez poster un commentaire / un problème / PR !
la source
Vous pouvez utiliser autopep8 ! Pendant que vous vous préparez une tasse de café, cet outil supprime joyeusement toutes ces violations PEP8 embêtantes qui ne changent pas la signification du code.
Installez-le via pip:
Appliquez ceci à un fichier spécifique:
ou à votre projet (récursivement), l'option verbeuse vous donne quelques commentaires sur la façon dont ça se passe :
Remarque: Parfois, la valeur par défaut de 100 passes n'est pas suffisante, je la règle sur 2000 car elle est raisonnablement élevée et attrapera tous les fichiers sauf les plus gênants (elle cesse de passer une fois qu'elle ne trouve aucune infraction pep8 résoluble) ...
À ce stade, je suggère de retester et de faire un commit!
Si vous voulez une conformité PEP8 "complète" : une tactique que j'ai utilisée est d'exécuter autopep8 comme ci-dessus, puis exécutez PEP8, qui imprime les violations restantes (fichier, numéro de ligne, et quoi):
et modifiez-les manuellement individuellement (par exemple E712 - comparaison avec booléen).
Remarque: autopep8 propose un
--aggressive
argument (pour "corriger" impitoyablement ces violations qui changent de sens), mais méfiez-vous si vous utilisez agressif, vous devrez peut-être déboguer ... (par exemple dans numpy / pandasTrue == np.bool_(True)
mais pasTrue is np.bool_(True)
!)Vous pouvez vérifier le nombre de violations de chaque type (avant et après):
Remarque: je considère que les E501 (ligne trop longue) sont un cas spécial car il y en aura probablement beaucoup dans votre code et parfois ils ne sont pas corrigés par autopep8.
A titre d'exemple, j'ai appliqué cette technique à la base de code pandas .
la source
pep8
package mentionné dans cette réponse a été renommépycodestyle
: github.com/PyCQA/pycodestyle/releases/tag/1.7.1@Andy Hayden a donné un bon aperçu de autopep8. En plus de cela, il existe un autre package appelé pep8ify qui fait également la même chose.
Cependant, les deux packages peuvent supprimer uniquement les erreurs de charpie mais ils ne peuvent pas formater le code.
Le code ci-dessus reste le même après avoir pep8ifying également. Mais le code n'a pas encore l'air bien. Vous pouvez utiliser des formateurs comme yapf , qui formateront le code même si le code est conforme à PEP8. Le code ci-dessus sera formaté pour
Parfois, cela détruit même votre formatage manuel. Par exemple
sera converti en
Mais vous pouvez lui dire d'ignorer certaines parties.
Tiré de mon ancien article de blog: automatiquement PEP8 et formatez votre code Python!
la source
little = more[3: 5]
un bogue dans pep8 (la bibliothèque)? yapf est définitivement le futur ici, l'algorithme derrière lui (essentiellement un chemin le plus court dans le graphique de toutes les options de formatage) est une solution très élégante, et aura probablement moins de bogues ainsi que le formatage canonique.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 :)
la source
J'ai fait de nombreuses recherches sur différents instruments pour python et le style de code. Il existe deux types d'instruments: les linters - analysant votre code et donnant des avertissements sur les styles de code mal utilisés et montrant des conseils sur la façon de le corriger, et les formateurs de code - lorsque vous enregistrez votre fichier, il reformate votre document en utilisant le style PEP.
Parce que le reformatage doit être plus précis - s'il remodèle quelque chose que vous ne voulez pas, il est devenu inutile - ils couvrent moins une partie de PEP, les linters en montrent beaucoup plus.
Tous ont des autorisations différentes pour la configuration - par exemple, pylinter configurable dans toutes ses règles (vous pouvez activer / désactiver tous les types d'avertissements), noir non configurable du tout.
Voici quelques liens et tutoriels utiles:
Documentation:
Linters (par ordre de popularité):
Formateurs de code (par ordre de popularité):
la source
Il y a beaucoup de.
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 plugin Python pour Eclipse, etc.
Il existe des formateurs / linters qui peuvent cibler plusieurs langues. https://coala.io en est un bon exemple.
Il y a ensuite les outils à usage unique, dont beaucoup sont mentionnés dans d'autres réponses.
Une méthode spécifique de reformatage automatique consiste à analyser le fichier dans l'arborescence AST (sans laisser de commentaires), puis à le renvoyer au texte (ce qui signifie que rien du formatage d'origine n'est conservé). Un exemple de cela serait https://github.com/python/black .
la source