271 votos

Pylint, PyChecker o pyflakes?

Me gustaría obtener alguna información sobre estas herramientas en:

  • características;
  • adaptabilidad;
  • facilidad de uso y curva de aprendizaje.

196voto

e-satis Puntos 146299

Bien, yo soy un poco curioso, así que sólo he probado el 3 de mí mismo a la derecha después de hacer la pregunta ;-)

Ok, esto no es muy grave revisión, pero aquí es lo que puedo decir :

He probado las herramientas con la configuración predeterminada (es importante porque prácticamente se puede elegir sus reglas de comprobación) en la siguiente secuencia de comandos :

#!/usr/local/bin/python
# by Daniel Rosengren modified by e-satis

import sys, time
stdout = sys.stdout

BAILOUT = 16
MAX_ITERATIONS = 1000

class Iterator(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.0

        for i in xrange(MAX_ITERATIONS) :
            temp = zr * zi
            zr2 = zr * zr
            zi2 = zi * zi
            zr = zr2 - zi2 + cr
            zi = temp + temp + ci

            if zi2 + zr2 > BAILOUT:
                return i

        return 0

t = time.time()
Iterator() 
print '\nPython Elapsed %.02f' % (time.time() - t)

Como resultado :

  • PyChecker se molesta porque se compila el módulo para analizar. Si no desea que el código se ejecute (por ejemplo, realiza una consulta SQL), malo.
  • PyFlakes se supone lite. De hecho, se decidió que el código era perfecto. Estoy buscando algo muy grave así que no creo que voy a ir a por ello.
  • PyLint ha sido muy hablador y clasificado el código 3/10 (OMG, soy un sucio coder !).

Puntos fuertes :

  • Muy descriptivo y preciso informe.
  • Detectar algunas código de olores. Aquí me dije a dejar a mi clase para escribir algo con funciones debido a que el enfoque OO era inútil en este caso específico. Algo sabía, pero nunca se espera de un equipo para decirme :-p
  • El completamente corregida, el código se ejecute más rápido (no hay clases, no hay enlace de referencia...).
  • Realizado por un equipo francés. Ok no es un plus para todo el mundo, pero me gusta ;-)

Contras :

  • Algunas normas son muy estrictas. Sé que se puede cambiar y que el valor por defecto es para que coincida con PEP 8, pero es que es un crimen para escribir 'el valor de x en la seq' ? Al parecer sí, porque usted no puede escribir un nombre de variable con menos de 3 letras. Voy a cambiar eso.
  • Muy muy hablador. Ser listo para usar tus ojos.

Corregido el script (con lazy doc cadenas y los nombres de variables) :

#!/usr/local/bin/python
# by Daniel Rosengren, modified by e-satis
"""
Module doctring
"""


import time
from sys import stdout

BAILOUT = 16
MAX_ITERATIONS = 1000

def mandelbrot(dim_1, dim_2):
    """
    function doc string
    """
    cr1 = dim_1 - 0.5
    ci1 = dim_2
    zi1 = 0.0
    zr1 = 0.0

    for i in xrange(MAX_ITERATIONS) :
        temp = zr1 * zi1
        zr2 = zr1 * zr1
        zi2 = zi1 * zi1
        zr1 = zr2 - zi2 + cr1
        zi1 = temp + temp + ci1

        if zi2 + zr2 > BAILOUT:
            return i

    return 0

def execute() :
    """
    func doc string
    """
    print 'Rendering...'
    for dim_1 in xrange(-39, 39): 
        stdout.write('\n')
        for dim_2 in xrange(-39, 39):
            if mandelbrot(dim_1/40.0, dim_2/40.0) :
                stdout.write(' ')
            else:
                stdout.write('*')


START_TIME = time.time()
execute()
print '\nPython Elapsed %.02f' % (time.time() - START_TIME)

EDICIÓN :

Gracias a Rudiger Lobo, descubrí pep8 que hace exactamente lo que su nombre sugiere : encontrar el pep8. Se ha encontrado encontrado varias sintaxis pep no-no que PyLint no. Pero PyLint encontrado cosas que no estaban vinculados específicamente a PEP8 pero interesante. Ambas herramientas son muy interesantes y complementarias.

Con el tiempo voy a usar ambos, ya que no son muy fáciles de instalar (a través de paquetes o setuptools) y salida de texto de forma fácil para la cadena.

Para darle un poco de 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    |=          |
+-------------------------+------+---------+-----------+

78voto

Rudiger Wolf Puntos 1053

Hace unos días PEP8 esta en PyPI.

  • PEP8 - guía de estilo de Python corrector
  • PEP8 es una herramienta para comprobar el código Python en contra de algunas de las convenciones de estilo de PEP 8.

Ahora es muy fácil de comprobar que el código contra PEP8.

Ver http://pypi.python.org/pypi/pep8

Iteramos.com

Iteramos es una comunidad de desarrolladores que busca expandir el conocimiento de la programación mas allá del inglés.
Tenemos una gran cantidad de contenido, y también puedes hacer tus propias preguntas o resolver las de los demás.

Powered by:

X