español - Herramienta para hacer cumplir los estándares/estilo de código de Python
pep8 python español (4)
Estoy tratando de encontrar una herramienta para verificar el estilo de codificación en Python.
Para PHP, he visto que existe el Code Sniffer y un pequeño script de Perl utilizado por Drupal. ¿Existe tal herramienta para el código de python?
En el pasado, he usado principalmente PyLint : se puede resaltar cuando PyLint una variable no definida, cuando importas cosas sin usarlas y así sucesivamente.
Puede ser un poco detallado, quejarse de cosas como líneas que tienen más de 80 caracteres, variables que no coinciden con expresiones regulares específicas, clases que tienen muy pocos métodos públicos, métodos que faltan docs-trings.
Por ejemplo, para script ...
import os
import somefakelib
def myfunc(x):
blah = "Something"
print os.listdir( x+blh )
PyLint genera los siguientes mensajes:
C: 1: Missing docstring
F: 2: Unable to import ''somefakelib'' (No module named somefakelib)
C: 4:myfunc: Missing docstring
C: 4:myfunc: Invalid name "x" (should match [a-z_][a-z0-9_]{2,30}$)
C: 4:myfunc: Invalid name "x" (should match [a-z_][a-z0-9_]{2,30}$)
E: 6:myfunc: Undefined variable ''blh''
W: 5:myfunc: Unused variable ''blah''
W: 2: Unused import somefakelib
Todas son quejas válidas, pero tiendo a desactivar muchos de los mensajes de la convención y refactorización. Puede deshabilitar mensajes específicos, ya sea como comentarios en su código:
#pylint:disable-msg=R0903,C0103,R0903,F0401,C0301
..o como argumentos de línea de comando al comando PyLint:
pylint --disable-msg=R0903,C0103,R0903,F0401,C0301 myfile.py
Con los mensajes anteriores deshabilitados, genera los siguientes mensajes para el código anterior:
C: 1: Missing docstring
C: 4:myfunc: Missing docstring
E: 6:myfunc: Undefined variable ''blh''
W: 5:myfunc: Unused variable ''blah''
W: 2: Unused import somefakelib
PyLint también genera un "informe de código", que incluye la cantidad de líneas de código / comentarios / cadena de documentos / espacio en blanco que tiene el archivo, el número de mensajes por categoría y le da a su código una "puntuación": 10 no son mensajes, generalmente 0 es un error de sintaxis
Otra opción es PyFlakes , que me parece un poco menos excesivamente verbosa (recientemente comencé a usarla en lugar de PyLint). Una vez más usando el script anterior, PyFlakes da los siguientes mensajes:
example.py:2: ''somefakelib'' imported but unused
example.py:6: undefined name ''blh''
La última opción que utilizo es pep8.py
, que como su nombre indica hace cumplir PEP8 . Es, con mucho, el más ... de secuencia de comandos pedante, que aplica elementos como las líneas / líneas correctas antes / después de las líneas en blanco, el espaciado alrededor del código, la sangría correcta de 4 espacios, etc.
Al ejecutarse en el código anterior, produce lo siguiente:
example.py:4:1: E302 expected 2 blank lines, found 1
example.py:6:23: E201 whitespace after ''(''
example.py:6:32: W292 no newline at end of file
En su mayoría se aplican elementos estilísticos como el espacio en blanco correcto, no hace mucho análisis estático del código como PyLint o PyFlakes, así que uso pep8.py junto con PyLint o PyFlakes.
pep8.py
se anunció originalmente en la lista de correo de python aquí , pero el enlace de descarga ahora está muerto. Hay un espejo github por cburroughs, con algunas correcciones menores en github.com/cburroughs/pep8.py , o puede Agarra la versión no modificada de una revisión anterior
PyChecker es otra opción, aunque no la he usado.
Encontré esta pregunta de mientras buscaba una herramienta de aplicación de estilo pep8 al asumir un proyecto existente (legado).
https://github.com/hhatto/autopep8
autopep8 -i yourpythonsourcefile.py
convertirá automáticamente todo el código fuente para confirmar con pep8. Lo intenté en mi proyecto legado y funciona muy bien. Así que pensé que actualizaría esta respuesta aquí en SO.
Hay un script llamado reindent.py
que a veces se incluye en la distribución de python de su sistema que pasará y volverá a sangrar todo su código para la sangría recomendada de 4 espacios.
Aquí tiene una copia en caso de que no la encuentre en su distribución: http://www.koders.com/python/fid24D30FCD2CE388C67CB980EF55630D25970CFB96.aspx?s=cdef%3Aparser