用于检查项目中所有功能使用情况的Python工具

时间:2018-08-03 14:06:11

标签: python python-3.x

我对在网络空间中某个地方之前被问过的这个问题记忆犹新,但是我再也找不到了。

说我有一个定义了许多函数(和/或类)的文件,但是我知道其中一些在我的项目中没有使用。是否有工具可以扫描我的项目以查看未使用的功能?

我知道我可以为每个功能单独执行此操作,例如使用Pycharm,但是我不知道对文件中的所有功能执行此操作的方法。感觉必须要有一种工具,但是我不知道。

编辑

我知道@deceze指出,在某些极端情况下,这种代码通常无法进行使用检查。但我对99%的时间都可以使用的工具感到满意。其余的可以通过例如单元测试来捕获,并手动处理。

2 个答案:

答案 0 :(得分:1)

我不知道有什么工具可以探索您的整个项目,但是您可以使用jedi库轻松地编写几行代码。

这里jedi.Script.usages正是您想要的,该工具将执行以下操作:

  • 使用您选择的python解释器创建一个jedi environment(这样将获得有关sys.path的信息
  • 遍历要分析的项目文件,并提取要检查用途的功能(glob,os.walk,自定义cli等)
  • 在每个文件上,您只需要提取要分析的功能(在解析器中,将位置存储为行/列对)
  • 使用先前的位置和通话习惯创建一个jedi脚本,然后将结果存储在字典中
  • 利润

PS:最“棘手”的步骤是从python文件中提取函数的步骤,但我想这也可以通过jedi来完成,而不是使用另一个内置的python解析器,这是未经测试的代码:

for definition in jedi.names(source, all_scopes=True, definitions=True, references=True):
    if definition.parent().type == "function": # The name is located in a function ...
        ass = definition.goto_assignments()
        if len(ass) > 0 and ass[0].parent().type == "function": # ... and is assigned to in a function
            print("Found a local variable:", definition.name)

摘自该github issue

答案 1 :(得分:0)

Coverage.py-最近使用它来显示我的测试范围。但它也可以在其他情况下使用