standard nomenclatura lineas largas functions convenciones python coding-style pep8

nomenclatura - python pep 20



Herramienta para convertir código Python para que sea compatible con PEP8 (5)

¡Puedes usar autopep8 ! Mientras te preparas una taza de café, esta herramienta elimina felizmente todas las molestas infracciones de PEP8 que no cambian el significado del código.

Instalarlo a través de pip:

pip install autopep8

Aplicar esto a un archivo específico:

autopep8 py_file --in-place

o a su proyecto (de manera recursiva), la opción detallada le da una idea de cómo va :

autopep8 project_dir --recursive --in-place --pep8-passes 2000 --verbose

Nota: A veces el valor predeterminado de 100 pasos no es suficiente, lo configuro en 2000 ya que es razonablemente alto y capturará todos los archivos menos los más problemáticos (se detiene una vez que no encuentra infracciones pep8 resolubles) ...

En este punto, sugiero volver a probar y hacer un compromiso.

Si desea cumplimiento "completo" de PEP8: una táctica que he usado es ejecutar autopep8 como se indicó anteriormente, luego ejecute PEP8, que imprime las violaciones restantes (archivo, número de línea y qué):

pep8 project_dir --ignore=E501

y cambiarlos manualmente de forma individual (por ejemplo, E712s - comparación con booleano).

Nota: autopep8 ofrece un argumento --aggressive (para "corregir" sin piedad estas violaciones que cambian el significado), pero tenga cuidado si usa agresivo puede tener que depurar ... (por ejemplo, en numpy / pandas True == np.bool_(True) pero no True is np.bool_(True) !)

Puede verificar cuántas violaciones de cada tipo (antes y después):

pep8 --quiet --statistics .

Nota: Considero que los E501 (línea demasiado larga) son un caso especial, ya que probablemente haya muchos en su código y, a veces, estos no son corregidos por autopep8.

Como ejemplo, apliqué esta técnica a la base de código de pandas .

Sé que hay herramientas que validan si su código Python es compatible con PEP8, por ejemplo, hay un servicio en línea y un módulo de Python .

Sin embargo, no puedo encontrar un servicio o módulo que pueda convertir mi archivo de Python en un archivo de Python válido y autónomo, PEP8. ¿Alguien sabe si hay alguno?
Supongo que es factible ya que PEP8 se trata de la apariencia del código, ¿verdad?


@Andy Hayden dio una buena visión general de autopep8. Además de eso, hay un paquete más llamado pep8ify que también hace lo mismo.

Sin embargo, ambos paquetes pueden eliminar solo errores de pelusa, pero no pueden formatear el código.

little = more[3: 5]

El código anterior permanece igual después de pep8ifying también. Pero el código aún no se ve bien. Puede usar formateadores como yapf , que formateará el código incluso si el código es compatible con PEP8. El código anterior se formateará para

little = more[3:5]

Algunas veces esto incluso destruye su formateo manual. Por ejemplo

BAZ = { [1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12] }

se convertirá en

BAZ = {[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12]}

Pero puedes decirle que ignore algunas partes.

BAZ = { [1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12] } # yapf: disable

Tomado de mi antigua publicación de blog: ¡ Automáticamente PEP8 y formatee su código de Python!


Hay muchos.

Los IDEs generalmente tienen alguna capacidad de formateo incorporada. IntelliJ Idea / PyCharm sí, lo mismo aplica para el complemento Python para Eclipse, y así sucesivamente.

Hay formateadores / linters que pueden apuntar a varios idiomas. https://coala.io es un buen ejemplo de eso.

Luego están las herramientas de propósito único, de las cuales muchas se mencionan en otras respuestas.


Lamentablemente, "pep8 storming" (todo el proyecto) tiene varios efectos secundarios negativos:

  • muchos conflictos de combinación
  • romper la culpa de Git
  • hacer la revisión del código difícil

Como alternativa (y gracias a @yp por la idea ), escribí un pequeño paquete que autopep8s solo aquellas líneas en las que has estado trabajando desde la última confirmación / rama:

Básicamente, dejando el proyecto un poco mejor de lo que encontraste :

pip install pep8radius

Supongamos que ha hecho su trabajo fuera del master y está listo para comprometerse:

# 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

O para limpiar las nuevas líneas que ha comprometido desde la última confirmación:

pep8radius --diff pep8radius --diff --in-place # the lines which changed since a specific commit `git diff 98f51f` pep8radius 98f51f --diff

Básicamente, pep8radius está aplicando autopep8 a líneas en la salida de git / hg diff (desde la última confirmación compartida ).

Esta secuencia de comandos actualmente funciona con git y hg, si estás usando algo diferente y quieres que esto funcione , publica un comentario / problema / PR !


Si está utilizando eclipse + PyDev, simplemente puede activar autopep8 desde la configuración de PyDev: Windows -> Preferencias -> escriba ''autopep8'' en el filtro de búsqueda.

Compruebe el ''¿uso autopep8.py para el formato del código?'' -> OK

Ahora el formato del código CTRL-SHIFT-F de eclipse debe formatear tu código usando autopep8 :)