Pep 8 check: Python Syntax Checker PEP8

Содержание

Стильный код на Python, или учимся использовать Flake8 / Хабр

Автор: Анатолий Соловей, developer

Язык программирования Python очень востребован на современном рынке, он развивается изо дня в день, и вокруг него сложилось активное сообщество. Во избежание конфликтов между разработчиками-питонистами, создатели языка написали соглашение PEP 8, описывающее правила оформления кода, однако даже там отмечено, что:

Many projects have their own coding style guidelines. In the event of any conflicts, such project-specific guides take precedence for that project.

В результате добавления новых правил количество требований к оформлению кода увеличилось настолько, что удержать их в голове стало очень трудно. При этом обращение к гайдам может занимать много времени и отвлекать от процесса разработки.

За долгое время работы у программистов вырабатывается собственный стиль написания кода, предпочтения в стайлгайдах и прочие мелочи, которые оставляют авторскую печать на программах девелопера.

Убедить разработчиков отказаться от привычных им кодстайлов очень сложно, но, даже если это удастся, велик шанс, что в их коде будут проскакивать старые фишки, добавленные в силу привычки.

Когда каждый апдейт проходит строгий код ревью, включающий в себя проверку стилей, подобные ошибки могут очень сильно замедлять процесс разработки. А если ошибки в итоге не заметят даже в процессе ревью, в системе контроля версий проекта очень скоро появится куча нечитаемого и непонятного кода.

На помощь в этом случае приходят линтеры — инструменты, контролирующие оформление кода в проекте. Именно они помогают поддерживать его чистоту и, в нашем случае, предотвращать создание коммитов, которые могут содержать ошибки. Я для контроля качества использую Flake8 и сейчас постараюсь объяснить, почему выбрал именно его, и расскажу, как его настроить, чтобы получить максимальный результат. Заинтересовались? Добро пожаловать под кат.


Flake8: Your Tool For Style Guide Enforcement

Сам Flake8 — инструмент, позволяющий просканировать код проекта и обнаружить в нем стилистические ошибки и нарушения различных конвенций кода на Python.

Flake8 умеет работать не только с PEP 8, но и с другими правилами, к тому же поддерживает кастомные плагины, поэтому в дальнейшем в этой статье я буду отталкиваться от правил из Google Python Style Guide.

Почему Flake8?


Flake8: pep8 + pyflakes + more

Создатель Flake8 Тарек Зиаде ставил перед собой цель объединить главные популярные инструменты контроля кодстайла в одной библиотеке, с чем в итоге успешно справился — Flake8 получился действительно универсальным.

Легкость установки и конфигурации

Чтобы проверить, отвечает ли код в вашем проекте основным требованиям PEP 8, достаточно установить Flake:

$ pip install flake8

и запустить его — просто ввести в командной строке:

$ flake8 my_project

после чего вы получите список с именами файлов и номерами строк, где были допущены ошибки, и подробное описание самих ошибок:

$ flake8 my_project
myfile. py:1: 'sys' imported but unused
myfile.py:4:1: E302 expected 2 blank lines, found 1

Великолепно, не правда ли? Но и это не всё. Если вы не любитель работать с консолью, то вы можете настроить интеграцию Flake8 с IDE или редактором, который вы предпочитаете использовать.

Интеграция Flake8 с редакторами и IDE

Интеграция с PyCharm
Так же актуально и для любой другой IDE от JetBrains.
Интеграция проводится всего за пару несложных шагов.

Откройте настройки

External Tools в File → Settings → Tools и нажмите на “+”, затем заполните поля по этому шаблону:

После этого нажмите на Output Filters, а затем на “+”, чтобы добавить новое правило для вывода сообщений от флейка:


Здесь мы говорим PyCharm, что хотим, чтобы в выводе строки с ошибками были кликабельными и открывали в редакторе файл и место с ошибкой

Все. Интеграция Flake8 с PyCharm закончена. Чтобы вызвать флейк и проверить свой код, кликаем правой кнопкой мыши на файл/директорию, которую мы хотим проверить, и в контекстном меню выбираем External Tools → Flake8.

В выводе PyCharm появится кликабельный список нарушений в выбранном файле/директории:

Интеграция с Atom
Чтобы установить инструмент Flake8 для Atom, используйте Atom package manager в Settings и найдите там linter-flake8:

Или вызовите

apm install flake8

из командной строки.

Затем перейдите в linter-flake8 settings и укажите путь к директории, где установлен flake8:

У linter-flake8 есть собственный ReadMe по настройке, с которым при желании вы можете ознакомиться на странице самого linter-flake8 в Atom.

Наличие Version Control Hooks

Именно это я считаю главным достоинством Flake8, которое выделяет его среди других линтеров. В отличии от большинства подобных инструментов, где для настройки VCS-хуков используются целые отдельные библиотеки и модули (как, например, в Pylint), настройка хуков в флейке проводится буквально в две строчки.

На момент написания этой статьи, Flake8 умеет использовать pre-commit-хуки для Git и Mercurial. Эти хуки позволяют, например, не допускать создания коммита при нарушении каких-либо правил оформления.

Установить хук для Git:

$ flake8 --install-hook git

И настроить сам гит, чтобы учитывать правила Flake8:

$ git config --bool flake8.strict true

Я продемонстрирую, как Git hook работает на проекте, который я использовал для примера интеграции Flake8 с PyCharm. В модуле flake8tutorial.py мы видим очевидные ошибки: импортированные и неиспользованные модули, остсутствие докстринга и пустой строки в конце файла.

Первым делом проинициализируем в этом проекте git-0репозиторий, установим flake8 хук и скажем нашему git, что он должен прогонять флейк перед коммитами:

Затем попробуем провести первый коммит:

Как видите, flake8 был вызван перед коммитом и не позволил нам закоммитить невалидные изменения.

Теперь фиксим ошибки, отмеченные флейком, и пытаемся закоммитить валидный код:

Коммит успешно создан. Отлично!

Настройка Flake8 для Mercurial практически идентична. Для начала нужно установить Flake8 Mercurial Hook:

$ flake8 --install-hook mercurial

И настроить сам Mercurial:

$ hg config flake8.strict true

Вот и все, хук для Меrcurial установлен, настроен и готов к использованию!

Подробнее о конфигурации Flake8


Базовая конфигурация

Список дополнительных опций и правил можно передать прямо при вызове из командной строки таким образом:

flake8 --select E123

(в этом примере опцией select мы говорим, чтобы Flake сообщал о нарушениях только правила E123 (это код правила “closing bracket does not match indentation of opening bracket’s line”))

.

Кстати, полный список опций с описанием вы можете найти в документации к самой библиотеке.

На мой взгляд, куда предпочтительнее настраивать Flake с помощью конфигурационных файлов, вы можете хранить настройки в одном из файлов setup.cfg, tox.ini или.flake8. Для ясности я предпочитаю использовать последний вариант.

Файл с настройками позволяет контролировать использование библиотекой тех же опций, что настраиваются для командной строки, базовый конфигурационный файл выглядит так:

[flake8]
ignore = D203
exclude = .git,__pycache__,docs/source/conf.py,old,build,dist

В этом файле мы сообщаем Flake, что он не должен оповещать нас о нарушениях правила D203 (“1 blank line required before class docstring”), а также не должен проверять файлы .git, __pycache__, docs/source/conf.py и директории old, build, dist.

В конфигурационных файлах можно оставлять комментарии, это полезно делать, если вы предоставляете большой список правил, которые Flake должен игнорировать:

[flake8]
# it's not a bug that we aren't using all of hacking
ignore =
    # F812: list comprehension redefines . ..
    F812,
    # h201: Use TODO(NAME)
    h201,
    # h302: assertRaises Exception too broad
    h302,
    # h333: Python 3.x incompatible use of print operator
    h333,
    # h401: one import per line
    h401,
    # h406: imports not in alphabetical order (time, os)
    h406,
    # h501: docstring should not start with a space
    h501,
    # h503: multi line docstrings should end on a new line
    h503,
    # h504: multi line docstring should start without a leading new line
    h504,
    # h505: multi line docstring summary not separated with an empty line
    h505,
    # H501: Do not use self.__dict__ for string formatting
    H501

Также можно добавить в исключения отдельную строку в вашем модуле, просто оставив на этой строке комментарий noqa. Тогда при проверке модуля Flake8 будет игнорировать ошибки, найденные в строках, помеченных этим комментарием:

import sys # noqa

Модули, расширяющие функциональность

Так как Flake позволяет создавать и использовать кастомные плагины, для него можно найти большое количество open-source плагинов. Я опишу только те, которые использую сам и считаю особенно полезными:

flake8-import-order

Плагин, проверяющий порядок импортов в проекте: в стандартной конфигурации первыми должны идти импорты стандартных библиотек (stdlib), затем импорты сторонних библиотек, а потом локальные пакеты, причем каждая группа отделена пустой строкой и отсортирована в алфавитном порядке.

Этот плагин расширяет список предупреждений Flake, добавляя туда три новых:

  • I100: Your import statements are in the wrong order.
  • I101: The names in your from import are in the wrong order.
  • I201: Missing newline between sections or imports.

Установка:

pip install flake8-import-order

Конфигурация:

[flake8]
application-import-names = my_project, tests # Указываем флейку директории, в которых хранятся локальные пакеты.
import-order-style = google # Указываем флейку на то, в каком порядке должны идти импорты.  Как я уже говорил выше, я предпочитаю использовать Google Style Guide.

Более подробно о настройке flake8-import-order можно прочитать на странице библиотеки на Github.

flake8-docstrings

Плагин, добавляющий поддержку функционала из pydocstyle — проверку докстрингов на соответствие конвенциям Питона.

Установка:

pip install flake8_docstrings

Список добавляемых этой библиотекой правил можно найти в документации pydocstyle.

Конфигурация:

Сама по себе эта библиотека никак не настраивается, однако добавленные правила можно внести в исключения, если какое-то из них неактуально для вашего проекта:

[flake8]
ignore = D101 # Игнорировать docstrings предупреждение “Missing docstring in public class”

Страница библиотеки на Github тут.

flake8-builtins

Плагин, проверяющий код на использование встроенных имен в качестве переменных или параметров.

Установка:

pip install flake8-builtins

Конфигурация:

Как и в случае с flake8-docstrings, у плагина нет дополнительных настроек, но добавленные им правила можно, например, внести в исключения флейка:

[flake8]
ignore = B001 # Игнорировать builtins предупреждение “<some_builtin> is a python builtin and is being shadowed, consider renaming the variable”

Более подробную информацию об этом плагине можно найти на странице этого плагина на Github.

flake8-quotes

Плагин, позволяющий контролировать тип кавычек, которые будут использоваться в проекте.

Установка:

pip install flake8-quotes

Конфигурация:

[flake8]
inline-quotes = " # Указываем, какой тип кавычек должен использоваться в вашем проекте

Более подробную информацию об этом плагине можно найти на странице этого плагина на Github.

Послесловие

Хотя настройки, описанные выше, в 97,5 % случаев смогут предотвратить появление некачественного кода в репозитории, он так или иначе может оказаться запушенным (например, если деву было лень вводить две строчки для настройки pre-commit hook). Поэтому я настоятельно рекомендую добавить вызов Flake8 на этапе билда пул-реквестов в используемой вами системе continuous integration, чтобы предотвратить мердж невалидных пул-реквестов и попадание ошибок в мастер.

Надеюсь, эта статья была вам полезна и позволит в дальнейшем максимально гибко и качественно настраивать рабочий процесс и стайлгайды в ваших Python-проектах. Всех благ.

Список источников:

  • Документация Flake8
  • Useful Python Modules: Flake8
  • Google Python Style Guide

AUR (en) — python-pytest-pep8

العربية Asturianu Català Český Dansk Deutsch Ελληνικά English Español Español (Latinoamérica) Suomi Français עברית Hrvatski Magyar Italiano 日本語 Norsk Nederlands Polski Português (Brasil) Português (Portugal) Română Русский Slovenčina Srpski Türkçe Українська 简体中文 正體中文

  • AUR Home
  • Packages
  • Register
  • Login

Search Criteria

Enter search criteria

Search by Name, DescriptionName OnlyPackage BaseExact NameExact Package BaseKeywordsMaintainerCo-maintainerMaintainer, Co-maintainerSubmitter

Keywords

Out of Date AllFlaggedNot Flagged

Sort by NameVotesPopularityVotedNotifyMaintainerLast modified

Sort order AscendingDescending

Per page 50100250

 

Package Details: python-pytest-pep8 1.

0.6-7

Dependencies (3)

  • python-pep8
  • python-pytest-cache
  • python-setuptools (make)

Required by (1)

  • python-pytest-flakes (check)

Sources (1)

  • https://pypi. org/packages/source/p/pytest-pep8/pytest-pep8-1.0.6.tar.gz

pep8 · PyPI

pep8 — проверка руководства по стилю Python

pep8 — это инструмент для проверки кода Python на соответствие некоторым стилям. соглашения в PEP 8.

Характеристики

  • Архитектура плагинов: добавление новых проверок очень просто.

  • Анализируемый вывод: Перейти к местоположению ошибки в вашем редакторе.

  • Маленький: всего один файл Python, требуется только stdlib. Вы можете использовать только файл pep8.py для этой цели.

  • Поставляется с комплексным набором тестов.

Установка

Вы можете установить, обновить и удалить pep8.py с помощью следующих команд:

 $ pip установить pep8
$ pip установить --обновить pep8
$ pip удалить pep8 

Также есть пакет для Debian/Ubuntu, но он не всегда Последняя версия.

Пример использования и вывода

 $ pep8 --first optparse. py
optparse.py:69:11: E401 множественный импорт в одной строке
optparse.py:77:1: E302 ожидал 2 пустые строки, нашел 1
optparse.py:88:5: E301 ожидал 1 пустую строку, нашел 0
optparse.py:222:34: W602 устаревшая форма вызова исключения
optparse.py:347:31: пробел E211 перед '('
optparse.py:357:17: пробел E201 после '{'
optparse.py:472:29Импорт обычно должен быть на отдельных строках.
    Хорошо: импортировать os\nimport sys
    E401: импорт системы, ОС 

Или вы можете отобразить, как часто обнаруживалась каждая ошибка:

 $ pep8 --statistics -qq Python-2.5/Lib
232 E201 пробел после '['
599 E202 пробел перед ')'
631 E203 пробел перед ','
842 E211 пробел перед '('
2531 E221 несколько пробелов перед оператором
4473 E301 ожидал 1 пустую строку, нашел 0
4006 E302 ожидал 2 пустые строки, нашел 1
165 E303 слишком много пустых строк (4)
325 E401 множественный импорт в одной строке
3615 Слишком длинная строка E501 (82 символа)
612 W601 .has_key() устарел, используйте 'in'
1188 W602 устаревшая форма вызова исключения 

Ссылки

  • Читать документацию

  • Разветвите меня на GitHub

Список изменений

1.

7.1 (2017-10-22)

Изменения:

1.7.0 (12 января 2016 г.)

Объявления:

Изменения:

  • Отменено исправление в #368, «параметры, передаваемые в командной строке, являются только принято». Это имеет много непредвиденных последствий в pep8 и flake8. и должен быть переработан, когда у меня будет больше времени.

  • Добавлена ​​поддержка Python 3.5. (Выпуск № 420 и № 459)

  • Добавлена ​​поддержка разбора многострочного параметра config_file. (выпуск № 429)

  • Улучшен разбор параметров. (выпуски № 420 и № 456)

Ошибки:

1.6.2 (15 февраля 2015 г.)

Изменения:

Ошибки:

1.6.1 (2015-02-08)

Изменения:

Ошибки:

1.6.0 (2015-02-06)

Новости:

Изменения:

  • Сообщите E731 о назначении лямбда. (выпуск № 277)

  • Сообщите E704 для однострочного определения вместо E701. Не сообщайте об этой ошибке в конфигурации по умолчанию. (выпуск № 277)

  • Заменить коды E111, E112 и E113 на коды E114, E115 и E116 за плохой отступ комментариев. (выпуск № 274)

  • Отчет E266 вместо E265, когда комментарий к блоку начинается с несколько #. (выпуск № 270)

  • Отчет E402 для операторов импорта не в начале файла. (выпуск № 264)

  • Не применять пробелы вокруг оператора **. (выпуск № 292)

  • Удаление пробелов вокруг путей во время нормализации. (Выпуск № 339 / № 343)

  • Обновить документацию —format. (Выпуск № 198 / запрос на включение № 310)

  • Добавить .tox/ к исключениям по умолчанию. (выпуск № 335)

  • Не сообщать E121 или E126 в конфигурации по умолчанию. (выпуски № 256 / № 316)

  • Разрешить пробелы вокруг знака равенства в аннотированной функции. (Выпуск №357)

  • Разрешить обратную косую черту во встроенном комментарии. (Выпуск №374)

  • Если используется —config, обрабатывается только эта конфигурация. В противном случае, merge пользовательская и локальная конфигурации объединяются. (Выпуск № 368 / № 369)

Исправление ошибок:

  • Не сбой, если Checker.build_tokens_line() возвращает None. (Выпуск №306)

  • Не сбой, если os.path.expanduser() выдает ImportError. (выпуск № 297)

  • Отсутствует пробел вокруг параметра ключевого слова, который не всегда сообщается, E251. (выпуск № 323)

  • Исправление ложных срабатываний E711/E712/E713. (выпуски №330 и №336)

  • Не пропускать физические проверки, если экранирована новая строка. (выпуск № 319)

  • Очистите sys.stdout, чтобы избежать состояния гонки при печати. См. ошибку flake8: https://gitlab.com/pycqa/flake8/issues/17 для более подробной информации. (Выпуск №363)

1.5.7 (2014-05-29)

Исправление ошибок:

  • Пропустить трассировку по сигналу «Borken pipe». (выпуск № 275)

  • Не выходить, если параметр в setup.cfg или tox.ini не признается.

  • Проверять последнюю строку, даже если она не заканчивается новой строкой. (выпуск № 286)

  • Всегда открывать файлы в универсальном режиме новой строки в Python 2. (Выпуск № 288)

1.5.6 (14.04.2014)

Исправление ошибок:

1.5.5 (10 апреля 2014 г.)

Исправление ошибок:

1.5.4 (07.04.2014)

Исправление ошибок:

1.5.3 (04.04.2014)

Исправление ошибок:

1.5.2 (04.04.2014)

Изменения:

Исправление ошибок:

  • Сообщите правильный номер строки для E303 с комментариями. (Выпуск №60)

  • Не разрешать перевод строки после параметра equal. (выпуск № 252)

  • Исправлен номер строки, сообщаемый для многострочных строк. (Выпуск №220)

  • Исправление ложных срабатываний E121/E126 с многострочными строками. (выпуск № 265)

  • Исправление E501, не обнаруженное в комментариях с Python 2.5.

  • Исправить положение каретки с —show-source, когда строка содержит табуляцию.

1.5.1 (27.03.2014)

Исправление ошибок:

1,5 (2014-03-26)

Изменения:

  • Отчет E129 вместо E125 для визуально отступленной строки с тем же отступ в качестве следующей логической строки. (выпуск №126)

  • Сообщить E265 о пробеле перед комментарием к блоку. (выпуск №190)

  • Сообщить E713 и E714, когда операторов нет и нет рекомендуемые. (выпуск № 236)

  • Разрешить длинные строки в многострочных строках и комментарии, если они не могут быть завернутым. (Выпуск № 224).

  • Опционально отключить проверку физических строк внутри многострочных строк, используя # noqa. (выпуск № 242)

  • Изменить текст для E121, чтобы сообщить «строка продолжения с отступом ниже для висячего отступа» вместо того, чтобы отступ не был кратно 4,

  • Сообщите E131 вместо E121/E126, если висячий отступ не согласованы в пределах одного и того же блока продолжения. Это помогает, когда ошибка E121 или E126 находится в списке игнорирования.

  • Отчет E126 вместо E121, когда висит строка продолжения с дополнительным отступом, даже если отступ не кратен 4.

Исправление ошибок:

  • Разрешить программам проверки сообщать об ошибках пустых файлов. (Выпуск № 240)

  • Исправлено игнорирование слишком большого количества проверок при использовании —select с кодами объявлено в расширении flake8. (выпуск № 216)

  • Исправление регрессии с несколькими скобками. (Выпуск № 214)

  • Исправить StyleGuide для разбора локальной конфигурации, если указаны пути аргументов ключевого слова. (выпуск № 246)

  • Исправление ложного срабатывания E124 для висячего отступа. (выпуск № 254)

  • Исправление ложноположительного результата E126 со встроенным двоеточием. (выпуск №144)

  • Исправление ложного срабатывания E126 при отступах с вкладками. (выпуск № 204)

  • Исправить поведение, когда исключение находится в файле конфигурации и текущий каталог не является каталогом проекта. (выпуск № 247)

  • Логические проверки могут возвращать None вместо пустого итератора. (выпуск № 250)

  • Не сообщать о нескольких E101, если начинается только первый отступ с вкладкой. (выпуск № 237)

  • Исправление редкого ложного срабатывания W602. (выпуск №34)

1.4.6 (2013-07-02)

Изменения:

  • Хонор #нока за ошибки Е711 и Е712. (выпуск №180)

  • Если в проекте присутствуют и tox.ini, и setup.cfg каталог, объединить их содержимое. Файл tox.ini занимает приоритет (такой же, как и раньше). (выпуск №182)

  • Дать приоритет —select над —ignore. (Выпуск №188)

  • Сравнивать полный путь при исключении файла. (выпуск №186)

  • Новая опция —hang-closed для переключения на альтернативный стиль отступ закрывающей скобки для висячего отступа. Добавьте ошибку E133 для закрывающая скобка, в которой отсутствует отступ. (выпуск №103)

  • Принять оба стиля отступа закрывающей скобки для висячего отступа. Не сообщать об ошибке E123 в конфигурации по умолчанию. (выпуск №103)

Исправление ошибок:

  • Не происходит сбой при выполнении проверок AST, если документ содержит нулевые байты. (выпуск №184)

  • Правильно сообщать о других ошибках E12, когда E123 игнорируется. (выпуск №103)

  • Исправление ложных срабатываний E261/E262, когда файл содержит спецификацию. (выпуск №193)

  • Fix E701, E702 и E703 иногда не обнаруживаются. (выпуск №196)

  • Исправление E122 не обнаружено в некоторых случаях. (Выпуск № 201 и № 208)

  • Исправление ложноположительного результата E121 с помощью нескольких скобок. (выпуск № 203)

1.4.5 (06.03.2013)

  • Если путь не указан, не пытайтесь читать со стандартного ввода. Особенность был добавлен в версии 1.4.3, но не поддерживается в Windows. Использовать — Аргумент имени файла для чтения из стандартного ввода. Это использование поддерживается начиная с 1.3.4. (выпуск №170)

  • Не требовать setuptools в setup.py. Он работает вокруг проблемы с pip и Python 3. (Выпуск № 172)

  • Добавить __pycache__ в список игнорирования.

  • Изменить вводящее в заблуждение сообщение для E251. (выпуск №171)

  • Не сообщать о ложном E302, если в исходном файле есть кодирующий файл cookie или комментарий к первой строке. (Выпуск №174)

  • Реорганизация тестов и добавление тестов для API и для командной строки использование и варианты. (выпуски №161 и №162)

  • Игнорировать все проверки, которые не выбраны явно при выборе передается конструктору StyleGuide.

1.4.4 (2013-02-24)

  • Сообщить E227 или E228 вместо E225 для пробелов вокруг побитового, сдвиг или по модулю операторов. (выпуск №166)

  • Изменить сообщение для E226, чтобы было ясно, что речь идет об арифметике операторы.

  • Исправление ложного срабатывания E128 для отступа линии продолжения с вкладками.

  • Исправление регрессии с помощью параметра —diff. (Выпуск №169)

  • Исправьте класс TestReport для печати неожиданных предупреждений и ошибки.

1.4.3 (2013-02-22)

  • Скрыть параметры —doctest и —testsuite при установке.

  • Исправлен сбой с помощью средств проверки AST, когда синтаксис неверен. (выпуск №160)

  • Чтение из стандартного ввода, если путь не указан.

  • Инициировать корректное завершение работы, нажав Control+C.

  • Разрешить изменение класса checker_class для StyleGuide.

1.4.2 (2013-02-10)

  • Поддержка средств проверки AST, предоставляемых сторонними приложениями.

  • Зарегистрируйте новые программы проверки с помощью register_check(func_or_cls, code).

  • Разрешить создание StyleGuide с пользовательским синтаксическим анализатором.

  • Принять визуальный отступ без круглых скобок после if заявление. (выпуск №151)

  • Исправить UnboundLocalError при использовании # noqa с продолжением строк. (выпуск №158)

  • Измените порядок строк для StandardReport.

  • Разверните вкладки при проверке строк продолжения E12. (выпуск №155)

  • Рефакторинг класса тестирования TestReport и конкретного теста функций в отдельный тестовый модуль.

1.4.1 (18.01.2013)

  • Разрешить синтаксис sphinx.ext.autodoc для комментариев. (выпуск №110)

  • Сообщите E703 вместо E702 для завершающей точки с запятой. (Выпуск №117)

  • Почитай #noqa в дополнение к #nopep8. (выпуск №149)

  • Предоставьте доступ к фабрике OptionParser для лучшей расширяемости.

1.

4 (2012-12-22)
  • Сообщить E226 вместо E225 для необязательных пробелов вокруг общего операторы (*, **, /, + и -). Эта новая ошибка код игнорируется в конфигурации по умолчанию, поскольку PEP 8 рекомендует «использовать собственное суждение». (выпуск №96)

  • Строки с # nopep8 в конце не будут выдавать ошибки в строке длина E501 или отступ линии продолжения E12*. (Выпуск №27)

  • Fix AssertionError, когда исходный файл содержит недопустимую строку окончание «\r\r\n». (выпуск №119)

  • Прочтите раздел [pep8] файла tox.ini или setup.cfg, если он есть. (Выпуск № 93 и № 141)

  • Добавьте документацию на основе Sphinx и опубликуйте ее на http://pep8.readthedocs.org/. (выпуск №105)

1.3.4 (2012-12-18)

  • Исправление ложных срабатываний E124 и E128 с комментариями. (выпуск №100)

  • Исправлена ​​ошибка стандартного ввода при работе с bpython. (выпуск №101)

  • Исправление ложного срабатывания E401. (выпуск №104)

  • Сообщить E231 о вложенном словаре в списке. (выпуск №142)

  • Поймать E271 в начале линии. (выпуск №133)

  • Исправление ложного срабатывания E126 для многострочных комментариев. (выпуск №138)

  • Исправление ложного срабатывания E221, когда оператору предшествует запятая. (выпуск №135)

  • Исправлена ​​ошибка —diff на однострочном фрагменте. (выпуск №137)

  • Исправьте переключатель —exclude для путей к каталогам. (выпуск №111)

  • Использование — имя файла для чтения из стандартного ввода. (Выпуск №128)

1.3.3 (27.06.2012)

1.3.2 (2012-06-26)

  • Вернуться к предыдущему поведению для —show-pep8: не подразумевает —first. (Выпуск №89)

  • Добавьте E902 для ошибок ввода-вывода. (Выпуск №87)

  • Исправление ложных срабатываний для E121 и пропущенных E124. (выпуск №92)

  • Установите разумный путь по умолчанию для файла конфигурации в Windows. (Выпуск №95)

  • Разрешить подробное описание в файле конфигурации. (выпуск №91)

  • Показать принудительную максимальную длину строки в сообщении об ошибке. (Выпуск №86)

1.3.1 (2012-06-18)

  • Объясните, какие параметры конфигурации ожидаются. Принять и рекомендовать имена параметров с дефисом вместо подчеркивания. (Выпуск №82)

  • Не читать пользовательскую конфигурацию при использовании в качестве модуля (кроме случаев, когда config_file=True передается конструктору StyleGuide).

  • Исправление неправильных или отсутствующих регистров для серии E12.

  • Исправление случаев, когда E122 пропущен. (Выпуск №81)

1.3 (15.06.2012)

Предупреждение

Внутренний API обратно несовместим.

  • Удалить глобальную конфигурацию и провести рефакторинг библиотеки вокруг класс StyleGuide; добавить возможность настройки различных репортеры. (Выпуск №35 и №66)

  • Чтение конфигурации пользователя из ~/.config/pep8 и локальная конфигурация из ./.pep8. (Выпуск №22)

  • Исправьте E502 для обратной косой черты, встроенной в многострочную строку. (Выпуск №68)

  • Исправление E225 для итерируемой распаковки Python 3 (PEP 3132). (Выпуск №72)

  • Включить новые шашки из серии E12 по умолчанию конфигурация.

  • Предложите менее подверженные ошибкам альтернативы для ошибок E712.

  • Переписать программы проверки, чтобы они работали быстрее (E22, E251, E27).

  • Исправлен сбой, когда анализируемый код недействителен (слишком много закрывающие скобки).

  • Исправьте E127 и E128 для отступа линии продолжения. (Выпуск №74)

  • Новая опция —format для настройки формата ошибки. (Выпуск №23)

  • Новая опция —diff для проверки только измененного кода. Единый diff читается из STDIN. Пример: hg diff | pep8 —diff (Выпуск №39)

  • Правильно сообщить количество сбоев и установить код выхода на 1 когда —doctest или —testsuite терпит неудачу.

  • Правильно определить кодировку в Python 3. (Выпуск № 69)

  • Отказ от поддержки Python 2.3, 2.4 и 3.0. (Выпуск №78)

1.2 (01.06.2012)

  • Добавьте отступы от E121 до E128 для продолжения строки. Эти проверки отключены по умолчанию. Если вы хотите принудительно выполнить все проверки, используйте переключатель —select=E,W. Патч Сэма Вилена. (выпуск №64)

  • Добавьте E721 для прямого сравнения типов. (Выпуск №47)

  • Добавьте E711 и E712 для сравнения с одиночками. (Выпуск №46)

  • Исправить ложные E225 и E701 для аннотаций функций. (Выпуск №29)

  • Добавьте E502 для явного соединения строк между скобками.

  • Исправлена ​​ошибка E901 при печати источника с —show-source.

  • Сообщать обо всех ошибках для каждой программы проверки вместо сообщения только первое вхождение для каждой строки.

  • Опция —show-pep8 подразумевает —first.

1.1 (2012-05-24)

  • Добавьте E901 для синтаксических ошибок. (выпуски №63 и №30)

  • Добавьте E271, E272, E273 и E274 для посторонних пробелов вокруг ключевые слова. (выпуск № 57)

  • Добавьте файл конфигурации tox.ini для тестов. (Выпуск №61)

  • Добавьте файл конфигурации .travis.yml для непрерывной интеграции. (Выпуск №62)

1.0.1 (2012-04-06)

1.0 (04.04.2012)

0.7.0 (26 марта 2012 г.)

  • Теперь —first печатает только первое появление каждой ошибки. Флаг —repeat устаревает, потому что он используется по умолчанию. поведение. (выпуск №6)

  • Разрешить указывать —max-line-length. (Выпуск №36)

  • Сделать шебанг более гибким. (Выпуск №26)

  • Добавить набор тестов в комплект. (выпуск №25)

  • Исправления для Jython. (Выпуск №49)

  • Добавить классификаторы PyPI. (Выпуск №43)

  • Исправьте параметр —exclude. (выпуск № 48)

  • Исправить W602, принять повышение с 3 аргументами. (Выпуск №34)

  • Правильно выбрать все тесты, если DEFAULT_IGNORE == ».

0.6.1 (03.10.2010)

0.6.0 (2010-09-19)

  • Набор тестов реорганизован и расширен для проверки большего количества отказов с меньшим количеством тестовых файлов. Подробнее читайте в строке документации run_tests. о синтаксисе.

  • Исправление E225: принять печать >>sys.stderr, «…» синтаксис.

  • Исправление E501 для строк, содержащих многобайтовые закодированные символы. (выпуск №7)

  • Исправление E221, E222, E223, E224 не обнаружено в некоторых случаях. (выпуск №16)

  • Исправьте ошибку E211, чтобы отклонить v = dic[‘a’] [‘b’]. (выпуск №17)

  • Код выхода всегда равен 1 при обнаружении какой-либо ошибки или предупреждения. (выпуск №10)

  • —проверки игнорирования теперь действительно игнорируются, особенно в в сочетании с —count. (выпуск №8)

  • Пустые строки с пробелами дают W293 вместо W291: некоторые разработчики хотите проигнорировать это предупреждение и сделать отступ пустых строк, чтобы вставить их код легко в интерпретаторе Python.

  • Исправление E301: не требуется пустая строка перед блоком с отступом. (выпуск №14)

  • Исправить E203, чтобы принять обозначение среза NumPy a[0, :]. (выпуск №13)

  • Повышение производительности.

  • Исправление декодирования и проверки файлов, отличных от UTF8, в Python 3.

  • Исправление E225: отклонение True+False при работе на Python 3.

  • Исправить исключение, когда строка начинается с оператора.

  • Разрешить новую строку перед закрытием ), } или ]. (выпуск №5)

0.5.0 (17.02.2010)

  • Переключатель —count изменен для печати на sys.stderr и установлен код выхода на 1, если обнаружена какая-либо ошибка или предупреждение.

  • Е241 и Е242 исключены из стандартных проверок. Если вы хотите включите эти проверки, используйте переключатель —select=E,W. (Выпуск №4)

  • Пустая строка не является обязательной перед методом первого класса или вложенным определение функции, даже если есть строка документации. (выпуск №1)

  • Добавьте переключатель —version.

  • Исправление ошибок декодирования в Python 3. (Выпуск № 13 [1])

  • Добавить опцию —select, которая является зеркалом —ignore.

  • Добавить проверки E261 и E262 на наличие пробелов перед встроенными комментариями.

  • Новая проверка W604 предупреждает об устаревшем использовании обратных кавычек.

  • Новая проверка W603 предупреждает об устаревшем операторе <>.

  • Повышение производительности за счет перезаписи E225.

  • E225 теперь принимает:

  • Зарезервируйте «2 пустые строки» для логических блоков на уровне модуля. (Е303)

  • Разрешить многострочные комментарии. (E302, выпуск №10 [1])

0.4.2 (2009-10-22)

0,4 (20.10.2009)

  • Поддержка всех версий Python от 2.3 до 3.1.

  • Новые и значительно расширенные самопроверки.

  • Добавлен параметр —count для печати общего количества ошибок и предупреждений.

  • Дальнейшие улучшения в обработке комментариев и пустых строк. (Выпуск №1 [1] и другие изменения.)

  • Проверять все файлы py в каталоге при передаче каталога (проблема № 2 [1]). Это также предотвращает исключение при обходе каталогов. с файлами, отличными от *.py.

  • E231 должен допускать запятую после ). (Выпуск №3 [1])

  • Больше не требуются пробелы вокруг знака равенства для ключевого слова аргументы или значения параметров по умолчанию.

[1] (1,2,3,4,5,6)

Эти проблемы относятся к предыдущему средству отслеживания проблем.

0.3.1 (14 сентября 2009 г.)

0,2 (16.10.2007)

0,1 (01.10.2006)

  • Первый выпуск.

python — проверка PEP8 в коде ноутбука iPython

спросил

Изменено 1 год, 2 месяца назад

Просмотрено 30 тысяч раз

Есть ли простой способ проверить, что код ноутбука iPython во время его написания совместим с PEP8?

  • python
  • ipython
  • jupyter-notebook
  • pep8

Убедитесь, что у вас есть модуль pycodestyle или flake8 , чтобы иметь возможность сверить свой код с руководствами по стилю. Затем включите функцию Magic с помощью модуля pycodestyle_magic (репозиторий github):

 pip install flake8 pycodestyle_magic
 
  • сначала загрузите магию в ячейку Jupyter Notebook:

%load_ext pycodestyle_magic

  • , а затем включите магию, чтобы выполнить проверку соответствия для каждой ячейки, используя:

%pycodestyle_on или %flake8_on

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

Чтобы отключить автоматическую проверку соответствия:

%pycodestyle_off или %flake8_off

10

Если это кому-то поможет, я использую:

conttest "jupyter nbconvert Notebook.ipynb --stdout --to script | flake8 --ignore=W391"

  • conttest повторы при сохранении изменений в блокноте
  • flake8 - указывает flake8 принимать ввод со стандартного ввода
  • --ignore=W391 — это потому, что вывод jupyter nbconvert , кажется, всегда имеет «пустую строку в конце файла», поэтому я не хочу, чтобы flake8 жаловался на это.

У меня проблема с ячейками уценки (длина строк которых может быть довольно большой): игнорировать ячейки уценки в `jupyter nbconvert` с `—to script`.

1

Установите расширение pep8 для ноутбука ipython с помощью следующей команды:

 %install_ext https://raw.githubusercontent.com/SiggyF/notebooks/master/pep8_magic.py
 

Дополнительные сведения см. в официальной документации.

После этого используйте функцию %%pep8 Cell magic, чтобы проверить конкретную ячейку на наличие стилей pep8.

Обратите внимание, что это должно быть помещено в каждую ячейку, для которой необходимо применить проверку pep8.

См. этот пример.

4

Я бы предложил использовать для этого nbQA:

 pip install -U nbqa flake8
конкурс "nbqa flake8 Notebook.ipynb"
 

, поскольку он будет пропускать ячейки уценки и надежно обрабатывать магию IPython.

Проблемы с другими ответами:

  • «jupyter nbconvert» не будет устойчивым к магии
  • pycodestyle_magic , к сожалению, больше не поддерживается (последний коммит датирован 2019 годом).)
  • install_ext устарел

Отказ от ответственности: я являюсь автором nbQA

Мне нравится содержать свои блокноты в чистоте, используя комбинацию black linter и pre-commit git hooks (для автоматического анализа при каждой фиксации).

 pip установить предварительную фиксацию «черный [jupyter]»
# <-- создайте свой .pre-commit-config.yaml
предварительная установка
черный {исходный_файл_или_каталог}
# ваши блокноты будут линтинговаться всякий раз, когда вы делаете коммит сейчас
 

Инструкции по настройке .pre-commit-config.yaml см. в черной документации) и документации по предварительной фиксации.

Вы можете включить части моего скрипта (ссылка ниже), чтобы увидеть подробности, какие строки кода требуют определенных исправлений PEP8.

Оставить комментарий

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *