如何在 Python 代码中找到未使用的函数?
- 2025-04-16 08:56:00
- admin 原创
- 20
问题描述:
如果你在一个相当大的项目中遗留了一些代码,该如何查找并删除这些死函数呢?
我见过这两个参考:查找未使用的代码和用于在 php 项目中查找未使用函数的工具,但它们似乎分别特定于 C# 和 PHP。
是否有一个 Python 工具可以帮助您找到源代码中其他任何地方都没有引用的函数(尽管有反射等)?
解决方案 1:
在 Python 中,你可以使用动态或静态代码分析器来查找未使用的代码。动态分析器的两个示例是coverage
和figleaf
。它们的缺点是你必须运行代码的所有可能的分支才能找到未使用的部分,但它们的优点是可以获得非常可靠的结果。
或者,您可以使用静态代码分析器,它只查看代码,但并不实际运行。它们运行速度更快,但由于 Python 的动态特性,结果可能包含误报。这类工具有两个:pyflakes
和vulture
。Pyflakes 可以查找未使用的导入语句和未使用的局部变量。Vulture 可以查找各种未使用和无法访问的代码。(坦白说:我是 Vulture 的维护者。)
这些工具可以在 Python 包索引https://pypi.org/中找到。
解决方案 2:
另一个选择是deadcode Python 包。它可以检测全局定义但未使用的变量、函数和类名。此工具用作静态代码检查器:它首先解析所有全局定义的名称,然后计算它们在整个代码库中被引用的次数。
您可以安装它:
pip install deadcode
并运行它
deadcode .
由于其他工具无法满足我的需求,所以我实现了这个工具。使用deadcode作为 CI/CD 流水线的一部分应该会很方便。希望它能帮到你。
解决方案 3:
由于 python 代码的呈现方式相当严格,根据正则表达式构建函数列表会很难吗def function_name(..)
?
然后搜索每个名称,并统计它在代码中出现的次数。它自然不会考虑注释,但只要你查看的是实例少于两三个的函数……
虽然有点简朴,但听起来像是一项不错的周末任务 =)
解决方案 4:
我不确定这是否有帮助,但您可以尝试使用coverage、figleaf或其他类似模块,它们记录您实际运行脚本/应用程序时使用了源代码的哪些部分。
解决方案 5:
除非你知道你的代码使用了反射,否则我会选择一个简单的 grep。不要低估 vim 中星号的威力(它会在文件中搜索光标下的单词),尽管这仅限于你当前正在编辑的文件。
另一个可以实现的解决方案是编写一个非常好的测试套件(不幸的是,这种情况很少发生),然后用弃用例程包装该例程。如果输出了弃用信息,则表示该例程已被调用,因此仍在某个地方使用。即使对于反射行为,这种方法也有效,但当然,如果您在执行例程调用时没有触发这种情况,那么您永远无法确定。
解决方案 6:
它不仅搜索函数名称,还搜索所有未使用的导入包。您需要在代码中搜索所有导入的包(包括别名)并搜索使用的函数,然后创建每个包的特定导入列表(例如,不要使用 import os,而是使用 from os import listdir、getcwd 等替换)
扫码咨询,免费领取项目管理大礼包!