Eu sei que existem ferramentas que validam se o seu código Python é compatível com PEP8, por exemplo, há um serviço online e um módulo python .
No entanto, não consigo encontrar um serviço ou módulo que possa converter meu arquivo Python em um arquivo Python válido PEP8 independente. Alguém sabe se existe algum?
Presumo que seja viável, já que o PEP8 tem tudo a ver com a aparência do código, certo?
python
coding-style
pep8
Chen Xie
fonte
fonte
Respostas:
Infelizmente, "pep8 storming" (todo o projeto) tem vários efeitos colaterais negativos:
Como alternativa (e graças a @yp pela ideia ), escrevi um pequeno pacote que autopep8s apenas as linhas nas quais você trabalhou desde o último commit / branch:
Basicamente, deixando o projeto um pouco melhor do que o encontrou :
Suponha que você tenha feito seu trabalho
master
e esteja pronto para se comprometer:Ou para limpar as novas linhas que você cometeu desde o último commit:
Basicamente,
pep8radius
é aplicar autopep8 às linhas na saída de git / hg diff (do último commit compartilhado ).Este script atualmente funciona com git e hg, se você estiver usando outra coisa e quiser que isso funcione , poste um comentário / problema / PR !
fonte
Você pode usar o autopep8 ! Enquanto você faz uma xícara de café, esta ferramenta felizmente remove todas as violações do PEP8 que não mudam o significado do código.
Instale-o via pip:
Aplique isso a um arquivo específico:
ou para o seu projeto (recursivamente), a opção detalhada fornece algum feedback de como está indo :
Nota: Às vezes, o padrão de 100 passes não é suficiente, eu o defino para 2.000, pois é razoavelmente alto e pegará todos os arquivos, exceto os mais problemáticos (ele para de passar quando não encontra infrações pep8 resolvíveis) ...
Nesse ponto, sugiro testar novamente e fazer um commit!
Se você quiser conformidade PEP8 "total" : uma tática que usei é executar o autopep8 como acima e, em seguida, executar o PEP8, que exibe as violações restantes (arquivo, número da linha e o que):
e altere-os individualmente (por exemplo, E712s - comparação com booleano).
Nota: autopep8 oferece um
--aggressive
argumento (para "consertar" impiedosamente essas violações de mudança de significado), mas cuidado se você usar agressivo, você pode ter que depurar ... (por exemplo, em numpy / pandas,True == np.bool_(True)
mas nãoTrue is np.bool_(True)
!)Você pode verificar quantas violações de cada tipo (antes e depois):
Nota: Eu considero E501s (linha muito longa) são um caso especial, pois provavelmente haverá muitos deles em seu código e às vezes não são corrigidos pelo autopep8.
Como exemplo, apliquei essa técnica à base de código do pandas .
fonte
pep8
pacote mencionado nesta resposta foi renomeado parapycodestyle
: github.com/PyCQA/pycodestyle/releases/tag/1.7.1@Andy Hayden deu uma boa visão geral do autopep8. Além disso, há mais um pacote chamado pep8ify que também faz a mesma coisa.
No entanto, ambos os pacotes podem remover apenas erros de lint, mas não podem formatar o código.
O código acima permanece o mesmo após a pep8ificação também. Mas o código ainda não parece bom. Você pode usar formatadores como yapf , que formatará o código mesmo se o código for compatível com PEP8. O código acima será formatado para
Algumas vezes, isso até destrói sua formatação manual. Por exemplo
será convertido para
Mas você pode dizer a ele para ignorar algumas partes.
Retirado de minha antiga postagem no blog: Automaticamente PEP8 e formate seu código Python!
fonte
little = more[3: 5]
um bug no pep8 (a biblioteca)? yapf é definitivamente o futuro aqui, o algoritmo por trás dele (essencialmente um caminho mais curto no gráfico de todas as opções de formatação) é uma solução muito elegante e provavelmente terá menos bugs, bem como formatação canônica.Se você estiver usando o eclipse + PyDev, você pode simplesmente ativar o autopep8 nas configurações do PyDev: Windows -> Preferências -> digite 'autopep8' no filtro de pesquisa.
Verifique o 'use autopep8.py para formatação de código?' -> OK
Agora, a formatação de código CTRL-SHIFT-F do eclipse deve formatar seu código usando autopep8 :)
fonte
Fiz uma ampla pesquisa sobre diferentes instrumentos para python e estilo de código. Existem dois tipos de instrumentos: linters - analisando seu código e dando alguns avisos sobre estilos de código mal usados e mostrando conselhos sobre como corrigi-lo, e formatadores de código - quando você salva seu arquivo, ele reformata seu documento usando o estilo PEP.
Porque a reformatação deve ser mais precisa - se remorfat algo que você não quer que se torne inútil - eles cobrem menos parte do PEP, os linters mostram muito mais.
Todos eles têm diferentes permissões de configuração - por exemplo, pylinter configurável em todas as suas regras (você pode ligar / desligar todos os tipos de avisos), preto não configurável em tudo.
Aqui estão alguns links e tutoriais úteis:
Documentação:
Linters (em ordem de popularidade):
Formatadores de código (em ordem de popularidade):
fonte
Há muitos.
IDEs geralmente têm algum recurso de formatação embutido. IntelliJ Idea / PyCharm tem, o mesmo vale para o plug-in Python para Eclipse e assim por diante.
Existem formatadores / linters que podem ser direcionados a vários idiomas. https://coala.io é um bom exemplo disso.
Depois, há as ferramentas de propósito único, das quais muitas são mencionadas em outras respostas.
Um método específico de reformatação automática é analisar o arquivo na árvore AST (sem descartar comentários) e, em seguida, despejá-lo de volta no texto (o que significa que nada da formatação original é preservado). Um exemplo disso seria https://github.com/python/black .
fonte