autopep8 автоматически форматирует код Python в соответствии с руководством по стилю PEP 8. Он использует утилиту pycodestyle, чтобы определить, какие части кода необходимо отформатировать. autopep8 способен исправить большинство проблем форматирования, о которых может сообщить pycodestyle.
Содержание
Установка
Требования
Использование
Функции
Более продвинутое использование
Отключение построчного режима
Использовать как модуль
Конфигурация
pyproject.toml
Использование с предварительной фиксацией
Тестирование
Поиск неисправностей
pkg_resources.DistributionNotFound
Ссылки
Из пипа:
$ pip install --upgrade autopep8
Рассмотрите возможность использования опции --user
.
autopep8 требует pycodestyle.
Чтобы изменить файл на месте (с агрессивным уровнем 2):
$ autopep8 --in-place --aggressive --aggressive <имя файла>
Перед запуском autopep8.
import math, sys;def example1():####Это длинный комментарий. Это должно быть заключено в 72 символа.some_tuple=( 1,2, 3,'a' );some_variable={'long':'Длинные строки кода должны быть заключены в 79 символов.','other':[math .pi, 100,200,300,9876543210,'Это длинная строка, которая продолжается'],'more':{'inner':'Вся эта логическая строка должен быть завернут.',some_tuple:[1,20,300,40000,500000000,60000000000000000]}}return (some_tuple, some_variable)def example2(): return {'has_key() устарел':True}.has_key({'f ':2}.has_key(''));класс Пример3(объект):def __init__ (self, bar): #Комментарии должны иметь пробел после хеша. если бар: бар+=1; бар=бар* бар ; return bar else:some_string = """ Отступы в многострочных строках трогать нельзя. Изменять отступы следует только в реальном коде."""return (sys.path, some_string)
После запуска autopep8.
import mathimport sysdef example1():# Это длинный комментарий. Это должно быть заключено в 72# символов.some_tuple = (1, 2, 3, 'a')some_variable = {'long': 'Длинные строки кода должны быть заключены в 79 символов.','other': [math .pi,100,200,300,9876543210,'Это длинная строка, которая продолжается'],'more': {'inner': 'Вся эта логическая строка должна быть обернутым.',some_tuple: [1,20,300,40000,500000000,60000000000000000]}}return (some_tuple, some_variable)def example2(): return ('' in {'f': 2}) в {'has_key() устарел': True}class example3(object):def __init__(self, bar):# Комментарии должны иметь пробел после хэша.if bar:bar += 1bar = bar * barreturn barelse:some_string = """ Отступы в многострочных строках трогать нельзя. Повторные отступы следует делать только в реальном коде. ."""return (sys.path, some_string)
Параметры:
использование: autopep8 [-h] [--версия] [-v] [-d] [-i] [--global-config имя файла] [--ignore-local-config] [-r] [-j n] [-p n] [-a] [--experimental] [--exclude globs] [--list-fixes] [--игнорировать ошибки] [--выбрать ошибки] [--максимальная длина строки n] [--line-range строка строка] [--hang-closing] [--exit-code] [файлы [файлы...]] Автоматически форматирует код Python в соответствии с руководством по стилю PEP 8. позиционные аргументы: файлы файлы для форматирования или '-' для стандарта в необязательные аргументы: -h, --help показать это справочное сообщение и выйти --version показать номер версии программы и выйти -v, --verbose вывести подробные сообщения; несколько -v приводят к большему количеству подробные сообщения -d, --diff распечатать разницу для фиксированного источника -i, --in-place вносить изменения в файлы на месте --global-config имя файла путь к глобальному файлу конфигурации pep8; если этот файл делает не существует, то это игнорируется (по умолчанию: ~/.config/pep8) --ignore-local-config не ищите и не применяйте локальные файлы конфигурации; если не прошло, значения по умолчанию обновляются со всеми файлами конфигурации в корневой каталог проекта -r, --recursive рекурсивно запускать каталоги; необходимо использовать с --in-place или --diff -j n, --jobs n количество параллельных заданий; соответствовать количеству процессоров, если значение равно меньше 1 -p n, --pep8-проходит n максимальное количество дополнительных проходов pep8 (по умолчанию: бесконечен) -a, --aggressive включить изменения без пробелов; множественное - результат в более агрессивные изменения --experimental включить экспериментальные исправления --exclude globs исключить имена файлов/каталогов, соответствующие этим запятым- разделенные шарики --list-fixes список кодов исправлений; используется --ignore и --select --ignore error не устраняет эти ошибки/предупреждения (по умолчанию: Э226, Э24, В50, В690) --select ошибки исправить только эти ошибки/предупреждения (например, E4,W) --max-line-length n установить максимально допустимую длину строки (по умолчанию: 79) --line-range строка строка, --range строка строка исправлять только ошибки, обнаруженные в этом широком диапазоне номера строк (например, 1 99); номера строк индексируются по адресу 1 --hang-closing Опция зависания, передаваемая в pycodestyle --exit-code изменить поведение кода выхода. поведение по умолчанию возвращаемое значение, 0 — нет различий, 1 — выход из-за ошибки. верните 2 при добавлении этой опции. 2 существует различия.
autopep8 исправляет следующие проблемы, о которых сообщил pycodestyle:
E101 — изменить отступы для всех строк. E11 — исправить отступ. E121 — исправить отступ, кратный четырем. E122 — Добавить отсутствующий отступ для висячего отступа. E123 — Совместите закрывающую скобку с открывающей скобкой. E124 — выровняйте закрывающую скобку по визуальному отступу. E125 — отступ для отличия строки от следующей логической строки. E126 — исправление чрезмерного висячего отступа. E127 — Исправлен визуальный отступ. E128 — Исправлен визуальный отступ. E129 — Исправлен визуальный отступ. E131 — исправлен выступающий отступ для невыровненной продолженной линии. E133 — исправлено отсутствие отступа для закрывающей скобки. E20 — удалить лишние пробелы. E211 — удалить лишние пробелы. E22 — исправьте лишние пробелы вокруг ключевых слов. E224 — удалите лишние пробелы вокруг оператора. E225 — исправлено отсутствие пробелов вокруг оператора. E226 — исправлено отсутствие пробелов вокруг арифметического оператора. E227 — исправлено отсутствие пробелов вокруг побитового оператора/оператора сдвига. E228 — исправлено отсутствие пробелов вокруг оператора по модулю. E231 — добавить недостающие пробелы. E241 — исправлены лишние пробелы вокруг ключевых слов. E242 — удалите лишние пробелы вокруг оператора. E251 — удалить пробелы вокруг знака «=» параметра. E252 — Отсутствуют пробелы вокруг параметра «равно». E26 — исправлено расстояние после хеша комментария для встроенных комментариев. E265 — исправлено расстояние после хеша комментария для комментариев блока. E266 — исправлено слишком много символов # в начале комментариев блока. E27 — исправьте лишние пробелы вокруг ключевых слов. E301 — Добавьте недостающую пустую строку. E302 — Добавьте недостающие 2 пустые строки. E303 — Удалить лишние пустые строки. E304 — удалить пустую строку после декоратора функции. E305 — Ожидаются 2 пустые строки после завершения функции или класса. E306 — Ожидается 1 пустая строка перед вложенным определением. E401 — Размещайте импорт в отдельных строках. E402 — исправление импорта уровня модуля не в начале файла. E501 — попытайтесь разместить строки в пределах символов --max-line-length. E502 — удалить посторонний переход новой строки. E701 — поместите составной оператор, разделенный двоеточием, на отдельные строки. E70 — поместите составной оператор, разделенный точкой с запятой, в отдельные строки. E711 — Исправлено сравнение с «Нет». E712 — исправлено сравнение с логическим значением. E713 — используйте «не в системе» для проверки членства. E714 — используйте проверку «не» для идентификации объекта. E721 — используйте isinstance() вместо прямого сравнения типов. E722 — Исправить голое исключение. E731 — используйте определение, если не назначаете лямбда-выражение. W291 — удалить конечные пробелы. W292 — Добавьте одну новую строку в конец файла. W293 — удалить конечные пробелы в пустой строке. W391 — удалить конечные пустые строки. W503 — исправлен разрыв строки перед бинарным оператором. W504 — Исправлен разрыв строки после бинарного оператора. W605 — исправлена неверная escape-последовательность «x».
autopep8 также исправляет некоторые проблемы, не обнаруженные pycodestyle.
Нормализовать файлы со смешанными окончаниями строк.
Поместите пустую строку между строкой документации класса и его первым объявлением метода. (Включено с E301
.)
Удалите пустые строки между объявлением функции и ее строкой документации. (Включено с E303
.)
autopep8 избегает исправления некоторых проблем, обнаруженных pycodestyle.
E112
/ E113
для отсутствия комментариев — это сообщения о неправильных отступах, которые нарушают правила синтаксиса. Их вообще не следует изменять.
E265
, который относится к интервалу после хеша комментария, игнорируется, если комментарий выглядит как код. autopep8 избегает их изменения, поскольку они не являются настоящими комментариями. Если вы действительно хотите избавиться от предупреждения pycodestyle, рассмотрите возможность простого удаления закомментированного кода. (Это можно автоматизировать с помощью искоренения.)
По умолчанию autopep8 вносит изменения только в пробелы. Таким образом, по умолчанию он не исправляет E711
и E712
. (Изменение x == None
на x is None
может изменить смысл программы, если у x
переопределен метод __eq__
.) Это также не исправляет устаревший код W6
. Чтобы включить эти более агрессивные исправления, используйте опцию --aggressive
:
$ autopep8 --aggressive <имя файла>
Используйте несколько --aggressive
, чтобы повысить уровень агрессивности. Например, для E712
требуется уровень агрессивности 2 (поскольку x == True
можно изменить на x
или x is True
, но autopep8 выбирает первое).
--aggressive
также будет более агрессивно сокращать строки. Он также будет более агрессивно удалять конечные пробелы. (Обычно мы не трогаем конечные пробелы в строках документации и других многострочных строках. А чтобы внести еще более агрессивные изменения в строки документации, используйте docformatter.)
Чтобы включить только часть исправлений, используйте параметр --select
. Например, чтобы исправить различные типы проблем с отступами:
$ autopep8 --select=E1,W1 <имя файла>
Если исправляемый файл большой, вы можете включить подробные сообщения о ходе выполнения:
$ autopep8 -v <имя файла>
Передача --experimental
включает следующие функции:
Сокращает строки кода, принимая во внимание их длину.
$ autopep8 --experimental <имя файла>
Можно отключить autopep8 до тех пор, пока он не будет снова включен в файле, используя autopep8: off
, а затем повторно включив его с помощью autopep8: on
.
# autopep8: выкл[ [23, 23, 13, 43], [32, 34, 34, 34], [56, 34, 34, 11], [10, 10, 10, 10], ]# autopep8: вкл.
fmt: off
и fmt: on
также действительны.
Самый простой способ использовать autopep8 в качестве модуля — использовать функцию fix_code()
:
>>> импортировать autopep8 >>> autopep8.fix_code('x= 123n') 'х = 123n'
Или с опциями:
>>> импортировать autopep8 >>> autopep8.fix_code('print( 123 )n', ... options={'игнорировать': ['E']}) 'распечатать(123)н'
По умолчанию, если существует $HOME/.config/pycodestyle
( ~.pycodestyle
в среде Windows), он будет использоваться в качестве файла глобальной конфигурации. Альтернативно вы можете указать файл глобальной конфигурации с помощью опции --global-config
.
Кроме того, если файлы setup.cfg
, tox.ini
, .pep8
и .flake8
существуют в каталоге, где находится целевой файл, они будут использоваться в качестве файла конфигурации.
В качестве раздела можно использовать pep8
, pycodestyle
и flake8
.
пример файла конфигурации:
[стиль пикодинга] max_line_length = 120 игнорировать = E501
autopep8 также может использовать pyproject.toml
. Раздел должен быть [tool.autopep8]
, а pyproject.toml
имеет приоритет над любыми другими файлами конфигурации.
пример файла конфигурации:
[инструмент.autopep8] max_line_length = 120 ignore = "E501,W6" # или ["E501", "W6"] на месте = правда рекурсивный = правда агрессивный = 3
autopep8 можно использовать как перехватчик для предварительной фиксации.
Чтобы добавить autopep8 в качестве плагина, добавьте это определение репозитория в свою конфигурацию:
репозитории: - репозиторий: https://github.com/hhatto/autopep8rev: ... # выберите нужный тег или версию или запустите перехватчики `pre-commit autoupdate`: - идентификатор: autopep8
Тестовые примеры находятся в test/test_autopep8.py
. Их можно запустить напрямую через python test/test_autopep8.py
или через tox. Последнее полезно для тестирования нескольких интерпретаторов Python. (В настоящее время мы тестируем версии CPython 3.8, 3.9, 3.10, 3.11 и 3.12. Мы также тестируем PyPy.)
Тестирование широкого спектра доступно через test/acid.py
. Этот сценарий запускает autopep8 для кода Python и проверяет правильность и полноту исправлений кода. Он может проверить, что байт-код остается идентичным. test/acid_pypi.py
использует acid.py
для тестирования последних выпущенных пакетов PyPI.
pkg_resources.DistributionNotFound
Если вы используете старую версию setuptools
, вы можете столкнуться с pkg_resources.DistributionNotFound
при попытке запустить autopep8
. Попробуйте обновить setuptools
, чтобы обойти эту проблему setuptools
:
$ pip install --upgrade setuptools
Используйте sudo
если вы устанавливаете в систему.
ПиПИ
GitHub
Кодеков