Python: статистика кода

Вы знаете, есть ли библиотека Python, которая генерирует статистику кода? Я думаю о том, чтобы указать на пакет и получить количество классов, функций, методов, строк докблока и т. Д.

В конечном итоге он может включать в себя бесполезные вещи, такие как количество лямбд или другую сумасшедшую статистику, просто для удовольствия.


person moraes    schedule 23.04.2011    source источник
comment
У Python отличный самоанализ. Создайте AST из исходного кода (suite, затем totuple) и проанализируйте сколько душе угодно .   -  person 9000    schedule 23.04.2011
comment
Спасибо, и да, я мог бы написать свой собственный, но я не об этом просил. Я спрашиваю, знает ли кто-нибудь существующую удобную библиотеку, которая извлекает статистику и занимается деталями самоанализа.   -  person moraes    schedule 23.04.2011


Ответы (3)


вы можете взглянуть на Pymetrics или проверить другие инструменты перечислены здесь

person Cédric Julien    schedule 23.04.2011

Обычно люди не делают пакеты из вещей, которые можно сделать с помощью дюжины или двух строк кода. Далее анализируется использование синтаксиса all python и возвращается словарь, отображающий узлы с тем, сколько раз этот узел появлялся в источнике. Примеры, показывающие количество операторов def и class, также приведены ниже.

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])
person Devin Jeanpierre    schedule 23.04.2011

Может быть, Tahar может помочь, он отображает статистику о том, как долго каждый функция, метод, класс и модуль (в строках кода). Однако, поскольку он использует модуль проверки, он может работать неожиданным образом, если один из анализируемых им модулей запускает графический интерфейс или что-то в этом роде.

Когда-нибудь я перейду на использование AST, хотя я не знаю, может ли AST предоставить услугу, аналогичную inspect.getsourcelines ()?

(РЕДАКТИРОВАТЬ)

Mergou (переписывание тахара с использованием модуля токенизации) находится в альфа-версии, вот видео это в действии: http://www.youtube.com/watch?v=PI0iBZmInFU&feature=youtu.be

person ychaouche    schedule 04.01.2013