Я знаю, что есть инструменты, которые проверяют, соответствует ли ваш код Python PEP8, например, есть и онлайн-сервис, и модуль Python .
Однако я не могу найти службу или модуль, который может преобразовать мой файл Python в автономный действительный файл Python PEP8. Кто-нибудь знает, есть ли?
Я предполагаю, что это возможно, поскольку PEP8 - это внешний вид кода, верно?
python
coding-style
pep8
Чэнь Се
источник
источник
Ответы:
К сожалению, у "pep8 storming" (всего проекта) есть несколько отрицательных побочных эффектов:
В качестве альтернативы (и благодаря @yp за идею ) я написал небольшой пакет, который autopep8 использует только те строки, над которыми вы работали с момента последнего коммита / ветки:
По сути, выход из проекта немного лучше, чем вы его нашли :
Предположим, вы выполнили свою работу
master
и готовы совершить:Или очистить новые строки, которые вы сделали после последнего коммита:
В основном
pep8radius
это применение autopep8 к строкам в выводе git / hg diff (из последнего общего коммита ).Этот скрипт в настоящее время работает с git и hg, если вы используете что-то еще и хотите, чтобы это работало, напишите комментарий / проблему / PR !
источник
Вы можете использовать autopep8 ! Пока вы делаете себе чашку кофе, этот инструмент удачно устраняет все те надоедливые нарушения PEP8, которые не меняют смысла. кода.
Установите его через pip:
Примените это к конкретному файлу:
или вашему проекту (рекурсивно), подробный вариант дает вам некоторую обратную связь о том, как это происходит :
Примечание: иногда 100 проходов по умолчанию недостаточно, я устанавливаю его на 2000, поскольку он достаточно высокий и будет перехватывать все, кроме наиболее проблемных файлов (он перестает проходить, как только не находит разрешаемых нарушений pep8) ...
На этом этапе я предлагаю повторно протестировать и выполнить фиксацию!
Если вы хотите «полного» соответствия PEP8: одна из тактик, которую я использовал, - запустить autopep8, как указано выше, затем запустить PEP8, который распечатает оставшиеся нарушения (файл, номер строки и т. Д.):
и вручную изменить их по отдельности (например, E712s - сравнение с логическим значением).
Примечание: autopep8 предлагает
--aggressive
аргумент (чтобы безжалостно "исправить" эти изменяющие смысл нарушения), но будьте осторожны, если вы действительно используете агрессивный режим, вам, возможно, придется отлаживать ... (например, в numpy / pandas,True == np.bool_(True)
но неTrue is np.bool_(True)
!)Вы можете проверить, сколько нарушений каждого типа (до и после):
Примечание: я считаю, что E501 (слишком длинная строка) - это особый случай, поскольку их, вероятно, будет много в вашем коде, и иногда они не исправляются с помощью autopep8.
В качестве примера я применил эту технику к базе кода pandas .
источник
pep8
упомянутый в этом ответе пакет был переименован вpycodestyle
: github.com/PyCQA/pycodestyle/releases/tag/1.7.1@Andy Hayden дал хороший обзор autopep8. В дополнение к этому есть еще один пакет под названием pep8ify который также делает то же самое.
Однако оба пакета могут удалять только ошибки lint, но не могут форматировать код.
Приведенный выше код остается таким же и после настройки. Но код пока выглядит не очень хорошо. Вы можете использовать средства форматирования, такие как yapf , которые будут форматировать код, даже если код совместим с PEP8. Приведенный выше код будет отформатирован как
Иногда это даже разрушает ваше ручное форматирование. Например
будет преобразован в
Но вы можете сказать ему игнорировать некоторые части.
Взято из моего старого сообщения в блоге: Автоматически PEP8 и форматируйте код Python!
источник
little = more[3: 5]
ошибка в pep8 (библиотеке)? За yapf определенно будущее, алгоритм, лежащий в основе этого (по сути, кратчайший путь в графике всех параметров форматирования), является очень элегантным решением и, вероятно, будет иметь меньше ошибок, а также каноническое форматирование.Если вы используете eclipse + PyDev, вы можете просто активировать autopep8 в настройках PyDev: Windows -> Preferences -> введите autopep8 в фильтр поиска.
Отметьте "использовать autopep8.py для форматирования кода?" -> ОК
Теперь форматирование кода CTRL-SHIFT-F в eclipse должно форматировать ваш код с помощью autopep8 :)
источник
Я провел обширное исследование различных инструментов для Python и стиля кода. Есть два типа инструментов: линтеры - анализируют ваш код и выдают некоторые предупреждения о неверно используемых стилях кода и показывают советы, как это исправить, и программы форматирования кода - когда вы сохраняете файл, они переформатируют ваш документ, используя стиль PEP.
Потому что переформатирование должно быть более точным - если он переформатировал что-то, что вы не хотите, оно стало бесполезным - они покрывают меньшую часть PEP, линтеры показывают гораздо больше.
Все они имеют разные права на настройку - например, pylinter настраивается по всем своим правилам (можно включать / выключать все типы предупреждений), черный вообще не настраивается.
Вот несколько полезных ссылок и руководств:
Документация:
Линтеры (в порядке популярности):
Средства форматирования кода (в порядке популярности):
источник
Много.
IDE обычно имеют встроенные возможности форматирования. IntelliJ Idea / PyCharm делает, то же самое касается плагина Python для Eclipse и так далее.
Существуют средства форматирования / линтеры, которые могут работать с несколькими языками. https://coala.io - хороший тому пример.
Затем есть одноцелевые инструменты, многие из которых упоминаются в других ответах.
Один из конкретных методов автоматического переформатирования - это проанализировать файл в дереве AST (без отбрасывания комментариев), а затем выгрузить его обратно в текст (что означает, что исходное форматирование не сохраняется). Примером этого может быть https://github.com/python/black .
источник