Инструмент для преобразования кода Python в соответствие с PEP8

Я знаю, что есть инструменты, которые проверяют, соответствует ли ваш код Python PEP8, например, есть онлайновая служба и модуль python .

Однако я не могу найти службу или модуль, которые могут преобразовать мой файл Python в автономный, PEP8-действительный файл Python. Кто-нибудь знает, есть ли они?
Я предполагаю, что это возможно, поскольку PEP8 – это все о появлении кода, верно?

  • Ошибка Python3: «Ошибка импорта: нет имени модуля urllib2»
  • Как проверить, находится ли значение float в определенном диапазоне и имеет ли заданное число десятичных цифр?
  • Ошибки Matplotlib приводят к утечке памяти. Как я могу освободить эту память?
  • Генерирование функций внутри цикла с выражением лямбда в python
  • Django vs web2py для начинающего разработчика
  • Django REST Framework - Сериализация необязательных полей
  • Проверка Django, если флажок установлен
  • Kivy - Screen Manager - доступ к атрибуту в другом классе
  • 5 Solutions collect form web for “Инструмент для преобразования кода Python в соответствие с PEP8”

    Вы можете использовать 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 – сравнение с булевым).

    Примечание: autopep8 предлагает « --aggressive аргумент» (безжалостно «исправлять» эти изменения, изменяющие значение), но будьте осторожны, если вы используете агрессивно, вам придется отлаживать … (например, в numpy / pandas True == np.bool_(True) но не True is np.bool_(True) !)

    Вы можете проверить, сколько нарушений каждого типа (до и после):

     pep8 --quiet --statistics . 

    Примечание. Я считаю, что E501s (слишком длинная строка) – это особый случай, поскольку в вашем коде, вероятно, будет много их, и иногда они не исправляются с помощью autopep8.

    В качестве примера я применил эту технику к базе кода pandas .

    К сожалению, «pep8 storming» (весь проект) имеет несколько негативных побочных эффектов:

    • много конфликтов слияния
    • перерыв git wame
    • сделать обзор кода сложным

    В качестве альтернативы (и благодаря @yp для этой идеи ) я написал небольшой пакет, в котором 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. В дополнение к этому есть еще один пакет под названием 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 .

    Тогда есть инструменты единственного назначения, многие из которых упоминаются в других ответах.

    Python - лучший язык программирования в мире.