autopep8 formata automaticamente o código Python para estar em conformidade com o guia de estilo PEP 8. Ele usa o utilitário pycodestyle para determinar quais partes do código precisam ser formatadas. autopep8 é capaz de corrigir a maioria dos problemas de formatação que podem ser relatados pelo pycodestyle.
Conteúdo
Instalação
Requisitos
Uso
Características
Uso mais avançado
Desativando linha por linha
Use como um módulo
Configuração
pyproject.toml
Uso com pré-commit
Teste
Solução de problemas
pkg_resources.DistributionNotFound
Ligações
Do pip:
$ pip instalar --upgrade autopep8
Considere usar a opção --user
.
autopep8 requer pycodestyle.
Para modificar um arquivo no local (com nível agressivo 2):
$ autopep8 --in-place --aggressive --aggressive
Antes de executar o autopep8.
import math, sys;def example1():####Este é um comentário longo. Isso deve ser agrupado para caber em 72 caracteres.some_tuple=( 1,2, 3,'a' );some_variable={'long':'Linhas de código longas devem ser agrupadas em 79 caracteres.','other':[math .pi, 100,200,300,9876543210,'Esta é uma longa string que continua'],'more':{'inner':'Essa linha lógica inteira deve ser empacotado.',some_tuple:[1,20,300,40000,500000000,6000000000000000]}}return (some_tuple, some_variable)def exemplo2(): return {'has_key() está obsoleto':True}.has_key({'f ':2}.has_key(''));classe Exemplo3( object ):def __init__ ( self, bar ): #Comments deve ter um espaço após o hash. se barra: barra+=1; barra=barra* barra; return bar else:some_string = """ O recuo em strings multilinhas não deve ser tocado. Somente o código real deve ser reindentado."""return (sys.path, some_string)
Depois de executar o autopep8.
import mathimport sysdef example1():# Este é um comentário longo. Isso deve ser agrupado para caber em 72 # caracteres.some_tuple = (1, 2, 3, 'a')some_variable = {'long': 'Linhas de código longas devem ser agrupadas em 79 caracteres.','other': [math .pi,100,200,300,9876543210,'Esta é uma longa string que continua'],'more': {'inner': 'Toda esta linha lógica deve ser empacotado.',some_tuple: [1,20,300,40000,500000000,6000000000000000]}}return (some_tuple, some_variable)def example2(): return ('' in {'f': 2}) in {'has_key() está obsoleto': True}classe Exemplo3(objeto):def __init__(self, bar):# Os comentários devem ter um espaço após o hash.if bar:bar += 1bar = bar * barreturn barelse:some_string = """ O recuo em strings multilinhas não deve ser tocado. Somente o código real deve ser reindentado ."""return (sys.path, some_string)
Opções:
uso: autopep8 [-h] [--version] [-v] [-d] [-i] [--global-config nome do arquivo] [--ignore-local-config] [-r] [-j n] [-p n] [-a] [--experimental] [--excluir globs] [--list-fixes] [--ignore erros] [--select erros] [--max-line-length n] [--line-range linha linha] [--hang-closing] [--exit-code] [arquivos [arquivos...]] Formata automaticamente o código Python para estar em conformidade com o guia de estilo PEP 8. argumentos posicionais: arquivos arquivos para formatar ou '-' para padrão em argumentos opcionais: -h, --help mostra esta mensagem de ajuda e sai --version mostra o número da versão do programa e sai -v, --verbose imprime mensagens detalhadas; múltiplo -v resulta em mais mensagens detalhadas -d, --diff imprime a comparação para a fonte fixa -i, --in-place faz alterações nos arquivos no local --global-config nome do arquivo caminho para um arquivo de configuração pep8 global; se este arquivo funcionar não existir, isso será ignorado (padrão: ~/.config/pep8) --ignore-local-config não procure e aplique arquivos de configuração locais; se não passado, os padrões são atualizados com quaisquer arquivos de configuração em o diretório raiz do projeto -r, --recursive executado recursivamente em diretórios; deve ser usado com --in-place ou --diff -j n, --jobs n número de trabalhos paralelos; corresponder à contagem de CPU se o valor for menos de 1 -p n, --pep8-passa n número máximo de passagens pep8 adicionais (padrão: infinito) -a, --aggressive permite alterações que não sejam espaços em branco; múltiplo -a resultado em mudanças mais agressivas --experimental habilita correções experimentais --exclude globs exclui nomes de arquivos/diretórios que correspondam a essas vírgulas globos separados --list-fixes lista códigos para correções; usado por --ignore e --select --ignore erros não corrige esses erros/avisos (padrão: E226,E24,W50,W690) --select erros corrige apenas esses erros/avisos (por exemplo, E4, W) --max-line-length n define o comprimento máximo de linha permitido (padrão: 79) --line-range linha linha, --range linha linha corrigir apenas erros encontrados dentro deste intervalo inclusivo de números de linha (por exemplo, 1 99); os números das linhas são indexados em 1 --hang-closing opção de fechamento suspensa passada para pycodestyle --exit-code altera o comportamento do código de saída. comportamento padrão de valor de retorno, 0 é sem diferenças, 1 é saída de erro. retorne 2 ao adicionar esta opção. 2 existe diferenças.
autopep8 corrige os seguintes problemas relatados por pycodestyle:
E101 - Reindentar todas as linhas. E11 - Corrigir recuo. E121 - Corrige o recuo para ser um múltiplo de quatro. E122 - Adicionar recuo ausente para recuo deslocado. E123 - Alinhe o suporte de fechamento para corresponder ao suporte de abertura. E124 - Alinhe o colchete de fechamento para corresponder ao recuo visual. E125 - Recuo para distinguir a linha da próxima linha lógica. E126 - Corrige recuo suspenso excessivo. E127 - Corrige recuo visual. E128 - Corrige recuo visual. E129 - Corrige recuo visual. E131 - Corrige recuo deslocado para linha de continuação desalinhada. E133 - Corrige recuo faltante no colchete de fechamento. E20 - Remova espaços em branco estranhos. E211 - Remova espaços em branco estranhos. E22 – Corrija espaços em branco estranhos em torno de palavras-chave. E224 - Remova espaços em branco estranhos ao redor do operador. E225 - Corrige espaços em branco ausentes ao redor do operador. E226 - Corrige espaços em branco ausentes ao redor do operador aritmético. E227 - Corrige espaços em branco ausentes em torno do operador bit a bit/shift. E228 - Corrige espaços em branco ausentes ao redor do operador de módulo. E231 - Adicione espaços em branco ausentes. E241 – Corrija espaços em branco estranhos em torno de palavras-chave. E242 - Remova espaços em branco estranhos ao redor do operador. E251 - Remova o espaço em branco ao redor do sinal do parâmetro '='. E252 - Espaço em branco ausente em torno dos parâmetros iguais. E26 - Corrigido espaçamento após hash de comentários para comentários embutidos. E265 - Corrigido espaçamento após hash de comentários para comentários em bloco. E266 - Corrigido muitos '#' iniciais para comentários de bloco. E27 – Corrija espaços em branco estranhos em torno de palavras-chave. E301 - Adicionar linha em branco ausente. E302 - Adicione 2 linhas em branco faltantes. E303 - Remova linhas em branco extras. E304 - Remover linha em branco após o decorador da função. E305 - Esperadas 2 linhas em branco após o término da função ou classe. E306 - Esperada 1 linha em branco antes de uma definição aninhada. E401 - Colocar as importações em linhas separadas. E402 - Corrigido importação em nível de módulo que não está no topo do arquivo E501 - Tente fazer com que as linhas caibam nos caracteres --max-line-length. E502 - Remova o escape estranho da nova linha. E701 - Coloque instruções compostas separadas por dois pontos em linhas separadas. E70 - Coloque instruções compostas separadas por ponto e vírgula em linhas separadas. E711 - Corrige comparação com Nenhum. E712 - Corrige comparação com booleano. E713 - Use 'not in' para teste de adesão. E714 - Use o teste 'is not' para identidade do objeto. E721 - Use "isinstance()" em vez de comparar tipos diretamente. E722 - Corrigir, exceto. E731 - Use um def quando não atribuir uma expressão lambda. W291 - Remover espaços em branco à direita. W292 - Adicione uma única nova linha no final do arquivo. W293 - Remova o espaço em branco final na linha em branco. W391 - Remova as linhas em branco finais. W503 - Corrige quebra de linha antes do operador binário. W504 - Corrige quebra de linha após operador binário. W605 - Corrige sequência de escape inválida 'x'.
autopep8 também corrige alguns problemas não encontrados pelo pycodestyle.
Normalize arquivos com finais de linha mistos.
Coloque uma linha em branco entre uma docstring de classe e sua primeira declaração de método. (Ativado com E301
.)
Remova as linhas em branco entre uma declaração de função e sua docstring. (Ativado com E303
.)
autopep8 evita corrigir alguns problemas encontrados pelo pycodestyle.
E112
/ E113
para não comentários são relatos de indentação incorreta que violam as regras de sintaxe. Estes não devem ser modificados de forma alguma.
E265
, que se refere ao espaçamento após o hash do comentário, será ignorado se o comentário parecer código. autopep8 evita modificá-los, pois não são comentários reais. Se você realmente deseja se livrar do aviso de pycodestyle, considere apenas remover o código comentado. (Isso pode ser automatizado por meio de erradicação.)
Por padrão, o autopep8 faz apenas alterações de espaços em branco. Assim, por padrão, não corrige E711
e E712
. (Alterar x == None
para x is None
pode alterar o significado do programa se x
tiver seu método __eq__
substituído.) Nem corrige o código obsoleto W6
. Para habilitar essas correções mais agressivas, use a opção --aggressive
:
$ autopep8 --aggressive
Use multiple --aggressive
para aumentar o nível de agressividade. Por exemplo, E712
requer nível de agressividade 2 (já que x == True
pode ser alterado para x
ou x is True
, mas autopep8 escolhe o primeiro).
--aggressive
também encurtará as linhas de forma mais agressiva. Ele também removerá os espaços em branco à direita de forma mais agressiva. (Normalmente, não tocamos nos espaços em branco finais em docstrings e outras strings multilinhas. E para fazer alterações ainda mais agressivas em docstrings, use docformatter.)
Para habilitar apenas um subconjunto de correções, use a opção --select
. Por exemplo, para corrigir vários tipos de problemas de indentação:
$ autopep8 --select=E1,W1
Se o arquivo que está sendo corrigido for grande, você pode querer ativar mensagens de progresso detalhadas:
$ autopep8 -v
Passar --experimental
habilita a seguinte funcionalidade:
Encurta linhas de código levando em consideração seu comprimento
$ autopep8 --experimental
É possível desabilitar o autopep8 até que ele seja reativado no arquivo, usando autopep8: off
e reativando com autopep8: on
.
#autopep8: desligado[ [23, 23, 13, 43], [32, 34, 34, 34], [56, 34, 34, 11], [10, 10, 10, 10], ]# autopep8: ativado
fmt: off
e fmt: on
também são válidos.
A maneira mais simples de usar autopep8 como módulo é através da função fix_code()
:
>>> importar autopep8 >>> autopep8.fix_code('x= 123n') 'x = 123n'
Ou com opções:
>>> importar autopep8 >>> autopep8.fix_code('print( 123 )n', ... opções={'ignorar': ['E']}) 'imprimir(123)n'
Por padrão, se $HOME/.config/pycodestyle
( ~.pycodestyle
no ambiente Windows) existir, ele será usado como arquivo de configuração global. Alternativamente, você pode especificar o arquivo de configuração global com a opção --global-config
.
Além disso, se os arquivos setup.cfg
, tox.ini
, .pep8
e .flake8
existirem no diretório onde o arquivo de destino existe, ele será usado como arquivo de configuração.
pep8
, pycodestyle
e flake8
podem ser usados como uma seção.
exemplo de arquivo de configuração:
[pycodestyle] max_line_length = 120 ignorar = E501
autopep8 também pode usar pyproject.toml
. A seção deve ser [tool.autopep8]
e pyproject.toml
tem precedência sobre quaisquer outros arquivos de configuração.
exemplo de arquivo de configuração:
[ferramenta.autopep8] max_line_length = 120 ignorar = "E501,W6" # ou ["E501", "W6"] no local = verdadeiro recursivo = verdadeiro agressivo = 3
autopep8 pode ser usado como gancho para pré-confirmação.
Para adicionar o autopep8 como um plugin, adicione esta definição de repositório à sua configuração:
repositórios: - repo: https://github.com/hhatto/autopep8rev: ... # selecione a tag ou revisão desejada ou execute `pre-commit autoupdate`hooks: - id: autopep8
Os casos de teste estão em test/test_autopep8.py
. Eles podem ser executados diretamente via python test/test_autopep8.py
ou via tox. O último é útil para testar vários intérpretes Python. (Atualmente testamos nas versões 3.8, 3.9, 3.10, 3.11 e 3.12 do CPython. Também testamos no PyPy.)
Testes de amplo espectro estão disponíveis em test/acid.py
. Este script executa o autopep8 no código Python e verifica a exatidão e integridade das correções do código. Pode verificar se o bytecode permanece idêntico. test/acid_pypi.py
usa acid.py
para testar os pacotes lançados mais recentemente no PyPI.
pkg_resources.DistributionNotFound
Se você estiver usando uma versão antiga de setuptools
, poderá encontrar pkg_resources.DistributionNotFound
ao tentar executar autopep8
. Tente atualizar setuptools
para solucionar esse problema setuptools
:
$ pip install --upgrade ferramentas de configuração
Use sudo
se estiver instalando no sistema.
PyPI
GitHub
Codecov