¿No debería editarse el título para incluir pep8 como una opción? Al principio, pensé que estaban hablando de la propuesta, no de un paquete PyPI real.
Ehtesh Choudhury
Respuestas:
275
Bueno, tengo un poco de curiosidad, así que solo probé los 3 justo después de hacer la pregunta ;-)
Ok, esta no es una revisión muy seria, pero esto es lo que puedo decir:
Probé las herramientas con la configuración predeterminada (es importante porque puedes elegir tus reglas de verificación) en el siguiente script:
#!/usr/local/bin/python# by Daniel Rosengren modified by e-satisimport sys, time
stdout = sys.stdout
BAILOUT =16
MAX_ITERATIONS =1000classIterator(object):def __init__(self):print'Rendering...'for y in xrange(-39,39):
stdout.write('\n')for x in xrange(-39,39):if self.mandelbrot(x/40.0, y/40.0):
stdout.write(' ')else:
stdout.write('*')def mandelbrot(self, x, y):
cr = y -0.5
ci = x
zi =0.0
zr =0.0for i in xrange(MAX_ITERATIONS):
temp = zr * zi
zr2 = zr * zr
zi2 = zi * zi
zr = zr2 - zi2 + cr
zi = temp + temp + ciif zi2 + zr2 > BAILOUT:return ireturn0
t = time.time()Iterator()print'\nPython Elapsed %.02f'%(time.time()- t)
Como resultado :
PyCheckeres problemático porque compila el módulo para analizarlo. Si no desea que se ejecute su código (por ejemplo, realiza una consulta SQL), está mal.
PyFlakesse supone que es lite. De hecho, decidió que el código era perfecto. Estoy buscando algo bastante severo, así que no creo que vaya a buscarlo.
PyLint ha sido muy hablador y calificó el código 3/10 (¡Dios mío, soy un codificador sucio!).
Puntos fuertes de PyLint:
Informe muy descriptivo y preciso.
Detecta algunos olores de código. Aquí me dijo que dejara mi clase para escribir algo con funciones porque el enfoque OO era inútil en este caso específico. Algo que sabía, pero nunca esperé que una computadora me dijera :-p
El código totalmente corregido se ejecuta más rápido (sin clase, sin enlace de referencia ...).
Hecho por un equipo francés. Ok, no es una ventaja para todos, pero me gusta ;-)
Contras de PyLint:
Algunas reglas son realmente estrictas. Sé que puede cambiarlo y que el valor predeterminado es hacer coincidir PEP8, pero ¿es un delito escribir 'for x in seq'? Aparentemente sí porque no puedes escribir un nombre de variable con menos de 3 letras. Voy a cambiar eso
Muy muy hablador. Prepárate para usar tus ojos.
Script corregido (con cadenas de documentos perezosos y nombres de variables):
Gracias a Rudiger Wolf, descubrí pep8que hace exactamente lo que su nombre sugiere: hacer coincidir PEP8. Ha encontrado varios sintaxis de sintaxis que PyLint no encontró. Pero PyLintencontré cosas que no estaban específicamente vinculadas a PEP8 pero que eran interesantes. Ambas herramientas son interesantes y complementarias.
Eventualmente usaré ambos, ya que son realmente fáciles de instalar (a través de paquetes o herramientas de configuración) y el texto de salida es muy fácil de encadenar.
Para darle una pequeña idea de su salida:
pep8 :
./python_mandelbrot.py:4:11: E401 multiple imports on one line./python_mandelbrot.py:10:1: E302 expected 2 blank lines, found 1./python_mandelbrot.py:10:23: E203 whitespace before ':'./python_mandelbrot.py:15:80: E501 line too long (108 characters)./python_mandelbrot.py:23:1: W291 trailing whitespace./python_mandelbrot.py:41:5: E301 expected 1 blank line, found 3
PyLint :
*************Module python_mandelbrot
C:15:Line too long (108/80)
C:61:Line too long (85/80)
C:1:Missing docstring
C:5:Invalid name "stdout"(should match (([A-Z_][A-Z0-9_]*)|(__.*__))$)
C:10:Iterator:Missing docstring
C:15:Iterator.__init__:Invalid name "y"(should match [a-z_][a-z0-9_]{2,30}$)
C:17:Iterator.__init__:Invalid name "x"(should match [a-z_][a-z0-9_]{2,30}$)[...]and a very long report with useful stats like :Duplication-----------+-------------------------+------+---------+-----------+||now |previous |difference |+=========================+======+=========+===========+|nb duplicated lines |0|0|=|+-------------------------+------+---------+-----------+|percent duplicated lines |0.000|0.000|=|+-------------------------+------+---------+-----------+
El propósito de pyflakes es analizar estáticamente su código para asegurarse de que no habrá errores de nombre o variables / importaciones no utilizadas.
culebrón
44
¿Me estoy equivocando o no hay un punto fuerte / débil para PyChecker ni PyFlakes?
Wernight
17
"Puntos fuertes: informe muy descriptivo y preciso". Cual informe? ¿Esta sección trata sobre todas las herramientas o solo una?
ijk
3
Me pregunto. Obviamente escribí todo el pro / con solo sobre PyLint. No tengo idea de por qué escribí de esta manera estúpida. Resaca tal vez? Lo siento chicos.
e-satis
13
flake8 cubre ambos pyflakesy pep8. Lo recomiendo encarecidamente con solo usar uno u otro.
Ehtesh Choudhury
93
pep8 fue agregado recientemente a PyPi.
pep8 - Comprobador de guía de estilo de Python
pep8 es una herramienta para verificar su código de Python contra algunas de las convenciones de estilo en PEP 8.
Hay IMO mejor paquete. flake8, combina los dos y agrega complejidad condicional, funciona en directorios y generalmente es bueno.
DinGODzilla
1
Correr flake8por primera vez me enseñó que me metí de lleno en un proyecto sin saber que Python prefiere los espacios por alguna razón. Tuve que usar --ignore W191para hacer que la salida sea útil.
cjm
3
Tenga en cuenta que las versiones recientes de pep8ahora se llaman pycodestyle; ver pypi.org/project/pycodestyle @cjm: python prefiere espacios porque eso es lo que especifican las pautas de estilo. Los espacios no son necesariamente superiores, pero la consistencia en toda la comunidad es una gran ventaja, y la comunidad ha decidido los espacios, así que hazlo.
Chris L. Barnes
¿Cómo configuro mejor mi editor (ya sea BBEdit o vim) para usar espacios para Python y pestañas para absolutamente todo lo demás? Parece que (al menos para BBEdit) es una configuración global.
cjm
1
@cjm En vim, puede hacer :set et(abreviatura de expandtabs) y luego :retabconvertir todas las pestañas en el búfer actual en espacios. También puede ser útil para establecer ts=4 sts=4 sw=4( tabstop, softtabstop, shiftwidth) primero. En cuanto a un enfoque general, prefiero usar editorconfig.org y sus complementos para establecer la configuración correcta en un repositorio, por lo que no tiene que preocuparse por reconfigurar su editor para diferentes bases de código.
Respuestas:
Bueno, tengo un poco de curiosidad, así que solo probé los 3 justo después de hacer la pregunta ;-)
Ok, esta no es una revisión muy seria, pero esto es lo que puedo decir:
Probé las herramientas con la configuración predeterminada (es importante porque puedes elegir tus reglas de verificación) en el siguiente script:
Como resultado :
PyChecker
es problemático porque compila el módulo para analizarlo. Si no desea que se ejecute su código (por ejemplo, realiza una consulta SQL), está mal.PyFlakes
se supone que es lite. De hecho, decidió que el código era perfecto. Estoy buscando algo bastante severo, así que no creo que vaya a buscarlo.PyLint
ha sido muy hablador y calificó el código 3/10 (¡Dios mío, soy un codificador sucio!).Puntos fuertes de
PyLint
:Contras de
PyLint
:Script corregido (con cadenas de documentos perezosos y nombres de variables):
EDITAR:
Gracias a Rudiger Wolf, descubrí
pep8
que hace exactamente lo que su nombre sugiere: hacer coincidir PEP8. Ha encontrado varios sintaxis de sintaxis que PyLint no encontró. PeroPyLint
encontré cosas que no estaban específicamente vinculadas a PEP8 pero que eran interesantes. Ambas herramientas son interesantes y complementarias.Eventualmente usaré ambos, ya que son realmente fáciles de instalar (a través de paquetes o herramientas de configuración) y el texto de salida es muy fácil de encadenar.
Para darle una pequeña idea de su salida:
pep8 :
PyLint :
fuente
pyflakes
ypep8
. Lo recomiendo encarecidamente con solo usar uno u otro.pep8 fue agregado recientemente a PyPi.
Ahora es muy fácil verificar su código con pep8.
Ver http://pypi.python.org/pypi/pep8
fuente
flake8
, combina los dos y agrega complejidad condicional, funciona en directorios y generalmente es bueno.flake8
por primera vez me enseñó que me metí de lleno en un proyecto sin saber que Python prefiere los espacios por alguna razón. Tuve que usar--ignore W191
para hacer que la salida sea útil.pep8
ahora se llamanpycodestyle
; ver pypi.org/project/pycodestyle @cjm: python prefiere espacios porque eso es lo que especifican las pautas de estilo. Los espacios no son necesariamente superiores, pero la consistencia en toda la comunidad es una gran ventaja, y la comunidad ha decidido los espacios, así que hazlo.:set et
(abreviatura deexpandtabs
) y luego:retab
convertir todas las pestañas en el búfer actual en espacios. También puede ser útil para establecerts=4 sts=4 sw=4
(tabstop
,softtabstop
,shiftwidth
) primero. En cuanto a un enfoque general, prefiero usar editorconfig.org y sus complementos para establecer la configuración correcta en un repositorio, por lo que no tiene que preocuparse por reconfigurar su editor para diferentes bases de código.