Инструмент для преобразования кода Python в PEP8-совместимый
Я знаю, что есть инструменты, которые проверяют, соответствует ли ваш код Python PEP8, например, есть оба онлайн-сервис и модуль python.
, Я не могу найти сервис или модуль, который может преобразование мой файл Python в автономный, PEP8 действительный файл Python. Кто-нибудь знает, есть ли они?
Я предполагаю, что это возможно, так как PEP8-это все о внешнем виде кода, верно?
5 ответов:
к сожалению, " PEP8 storming "(весь проект) имеет несколько негативных побочных эффектов:
- много конфликтов слияния
- перерыв ГИТ вину
- сделать обзор кода трудно
в качестве альтернативы (и спасибо @y-p для идеи), я написал небольшой пакет, который autopep8s только те строки, которые вы работали с момента последнего фиксации / ветви:
в основном покидая проект а маленькийлучше, чем вы нашли его:
pip install pep8radiusПредположим, вы сделали свою работу от
masterи готовы совершить:# 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или очистить новые строки, которые вы совершили с момента последнего фиксации:
pep8radius --diff pep8radius --diff --in-place # the lines which changed since a specific commit `git diff 98f51f` pep8radius 98f51f --diffв принципе
pep8radiusприменяет autopep8 к линиям на выходе git / hg diff (от последний общий совершения).этот скрипт в настоящее время работает с git и hg, если вы используете что-то еще и хотите, чтобы это работало пожалуйста, оставьте комментарий / вопрос / PR!
можно использовать autopep8! Пока вы делаете себе чашку кофе, этот инструмент с радостью удаляет все эти досадные нарушения PEP8, которые не меняют смысл кодекса.
установите его через pip:
pip install autopep8применить это к конкретному файлу:
autopep8 py_file --in-placeили к вашему проекту (рекурсивно), подробный вариант дает вам некоторую обратную связь о том, как это происходит:
autopep8 project_dir --recursive --in-place --pep8-passes 2000 --verboseПримечание.: Иногда по умолчанию 100 проходов недостаточно, я установил его на 2000, поскольку он достаточно высок и будет ловить все, кроме самых неприятных файлов (он перестает проходить, как только не находит разрешимых нарушений pep8)...
на данный момент я предлагаю повторно протестировать и сделать коммит!
если вы хотите "полный" соответствие PEP8: одна тактика, которую я использовал, - это запустить autopep8, как указано выше, а затем запустить PEP8, который печатает остальные нарушения (файл, номер строки и что):
pep8 project_dir --ignore=E501и вручную изменить их по отдельности (например, E712s - сравнение с boolean).
Примечание: autopep8 предлагает
--aggressiveаргумент (чтобы безжалостно "исправить" эти нарушения, изменяющие смысл), но будьте осторожны, если вы используете агрессивный, вам, возможно, придется отлаживать... (например, в numpy / pandasTrue == np.bool_(True)а неTrue is np.bool_(True)!)вы можете проверить, сколько нарушений каждого типа (до и после):
pep8 --quiet --statistics .примечание: Я считаю E501s (строка слишком длинная) - это особый случай, поскольку в вашем коде, вероятно, будет много таких, и иногда они не исправляются autopep8.
в качестве примера применил этот технику панды базовый код.
@Andy Hayden дал хороший обзор autopep8. В дополнение к этому есть еще один пакет под названием pep8ify что также делает то же самое.
однако оба пакета могут удалять только ошибки lint, но они не могут форматировать код.
little = more[3: 5]выше код остается таким же после pep8ifying также. Но код пока не выглядит хорошо. Вы можете использовать форматеры, такие как yapf, который будет форматировать код, даже если код соответствует PEP8. Приведенный выше код будет отформатирован в
little = more[3:5]иногда это даже разрушает ваше ручное форматирование. Например
BAZ = { [1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12] }будет преобразовано в
BAZ = {[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12]}но вы можете сказать ему, чтобы игнорировать некоторые части.
BAZ = { [1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12] } # yapf: disableвзято из моего старого сообщения в блоге:автоматически PEP8 и форматировать код Python!
Если вы используете eclipse + PyDev, вы можете просто активировать autopep8 из настроек PyDev: Windows - > настройки - > введите "autopep8" в фильтре поиска.
Проверьте ' использовать autopep8.py для форматирования кода?'- >ОК
теперь форматирование кода CTRL-SHIFT-F eclipse должно форматировать ваш код с помощью autopep8:)
есть много.
IDE обычно имеют некоторые возможности форматирования встроены. IntelliJ Idea / PyCharm делает то же самое для плагина Python для Eclipse и так далее.
есть форматеры / линтеры, которые могут предназначаться для нескольких языков. https://coala.io является хорошим примером этого.
тогда есть одноцелевые инструменты, о которых многие упоминаются в других ответах.

Comments