132 votes

Outil pour convertir le code Python en conformité avec PEP8

Je sais qu'il existe des outils qui permettent de valider si votre code Python est conforme à la PEP8, par exemple, il est à la fois un service en ligne et un module python.

Cependant, je ne peux pas trouver un service ou d'un module qui peut convertir mon fichier Python pour une auto-contenue, PEP8 valide fichier Python. Personne ne sait si il est tout?
Je suppose que c'est faisable depuis PEP8 est tout au sujet de l'apparition du code, non?

213voto

Andy Hayden Points 38010

Vous pouvez utiliser autopep8! Tandis que vous vous faire une tasse de café cet outil heureusement supprime tous ces satanés PEP8 violations qui ne changent pas le sens du code.

Installer via pip:

pip install autopep8

L'appliquer à un fichier spécifique:

autopep8 py_file --in-place

ou à votre projet (de manière récursive), l'option verbose vous donne de la rétroaction de la façon dont il va:

autopep8 project_dir --recursive --in-place --pep8-passes 2000 --verbose

Remarque: Parfois, le défaut de 100 passes n'est pas assez, je l'ai mis à 2000, il est raisonnablement élevé et va attraper tous les, mais le plus gênant fichiers (il s'arrête en passant une fois qu'il ne trouve pas résoluble pep8 infractions)...

À ce stade, je suggère de nouveaux essais et de faire un commit!

Si vous voulez "plein" PEP8 de la conformité: une tactique que j'ai utilisé est de courir autopep8 comme ci-dessus, puis lancez PEP8, qui imprime le reste des violations (fichier, le numéro de ligne, et de quoi?):

pep8 project_dir --ignore=E501

et de modifier manuellement ces individuellement (par exemple, E712s - comparaison avec l'opérateur booléen).

Remarque: autopep8 offre une --aggressive argument (à impitoyablement "fixer" ces sens-évolution des infractions), mais méfiez-vous si vous ne l'utilisez agressif, vous pourriez avoir à débugger... (par exemple dans numpy/pandas True == np.bool_(True) mais pas True is np.bool_(True)!)

Vous pouvez vérifier le nombre de violations de chaque type (avant et après):

pep8 --quiet --statistics .

Note: je considère E501s (trop long de ligne) sont un cas spécial, car il y aura probablement beaucoup de ces dans votre code et parfois ceux-ci ne sont pas corrigées par autopep8.

Comme exemple, j'ai appliqué cette technique pour les pandas base de code.

43voto

Andy Hayden Points 38010

Malheureusement "pep8 storming" (l'ensemble du projet) a plusieurs effets secondaires négatifs:

  • beaucoup de fusion-conflits
  • pause git blâmer
  • faire la revue de code difficile

Comme une alternative (et merci à @y-p pour l'idée), j'ai écrit un petit paquet qui autopep8s seulement les lignes qui vous avez travaillé depuis le dernier commit/branche:

Fondamentalement, laissant le projet un peu mieux que vous l'avez trouvé:

pip install pep8radius

Supposons que vous avez fait votre travail hors de l' master et sont prêts à s'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 le nettoyage de la nouvelle ligne que vous avez commis 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 est l'application de autopep8 de lignes dans le résultat de git/hg diff (à partir de la dernière validation partagée).

Ce script fonctionne actuellement avec git et hg, si vous utilisez autre chose et que ce travail s'il vous plaît poster un commentaire/question/PR!

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X