Python: código de estadísticas

¿Sabes si hay una biblioteca de Python que genera estadísticas sobre el código? Estoy pensando en apuntar a un paquete y obtener el número de clases, funciones, métodos, líneas de bloques de documentos, etc.

Eventualmente podría incluir cosas inútiles como la cantidad de lambdas u otras estadísticas locas, solo por diversión.

Puede echar un vistazo a Pymetrics o consultar otras herramientas enumeradas allí.

La gente generalmente no hace paquetes con cosas que se pueden hacer en una docena o dos líneas de código. El siguiente análisis analiza el uso de toda la syntax de python y devuelve un diccionario que asigna nodos de ast a cuántas veces apareció ese nodo en la fuente. Los ejemplos que muestran el número de declaraciones de def y class están debajo.

 import collections import os import ast def analyze(packagedir): stats = collections.defaultdict(int) for (dirpath, dirnames, filenames) in os.walk(packagedir): for filename in filenames: if not filename.endswith('.py'): continue filename = os.path.join(dirpath, filename) syntax_tree = ast.parse(open(filename).read(), filename) for node in ast.walk(syntax_tree): stats[type(node)] += 1 return stats print("Number of def statements:", analyze('.')[ast.FunctionDef]) print("Number of class statements:", analyze('.')[ast.ClassDef]) 

Tal vez Tahar pueda ayudar, muestra estadísticas acerca de la duración de cada función, método, clase y módulo (en líneas de código). Sin embargo, dado que está utilizando el módulo de inspección, puede ejecutarse de formas inesperadas si uno de los módulos que analiza inicia una GUI o algo así.

Algún día cambiaré a usar AST, aunque no sé si AST puede proporcionar un servicio que sea similar a inspect.getsourcelines ()?

(EDITAR)

Mergou (la reescritura de tahar utilizando el módulo tokenize) está en alfa, aquí hay un video de él en acción: http://www.youtube.com/watch?v=PI0iBZmInFU&feature=youtu.be