如何在Python代码中find未使用的函数?

所以你有一些遗留代码在一个相当庞大的项目中。 你怎么find并删除死的function?

我已经看到了这两个引用: 查找未使用的代码和工具,以查找PHP项目中未使用的function ,但他们似乎特定于C#和PHP,分别。

有没有一个Python工具,可以帮助你find没有在源代码中任何地方引用的函数(尽pipereflection/等)?

在Python中,您可以使用dynamic或静态代码分析器来查找未使用的代码。 dynamic分析仪的两个例子是coveragefigleaf 。 他们有缺点,你必须运行你的代码的所有可能的分支,以find未使用的部分,但他们也有你得到非常可靠的结果的优势。

或者,您可以使用静态代码分析器来查看您的代码,但不要真正运行它。 他们运行速度更快,但由于python的dynamic性质,结果不是100%准确的,所以你可能要仔细检查它们。 想到两个工具是pyflakesvulture 。 它们是互补的:Pyflakes发现未使用的导入和未使用的局部variables,而秃鹫发现未使用的函数,方法,类,variables和属性。

这些工具可以在Python包索引http://pypi.python.org/pypi上find

pylint可以做你想做的。

我不确定这是否有帮助,但是您可以尝试使用coverage , figleaf或其他类似的模块,这些模块会logging您实际运行脚本/应用程序时使用源代码的哪一部分。

由于python代码提供了相当严格的方式,是否很难build立一个基于正则expression式查找def function_name(..)的函数列表?

然后search每个名称,并总结代码中的特征。 它不会自然地考虑到意见,但只要你看看less于两个或三个实例的function…

这有点斯巴达人,但它听起来像一个很好的睡周末的任务=)

除非你知道你的代码使用reflection,如你所说,我会去一个微不足道的grep。 不要低估vim中的星号(在文件中search光标下的单词),尽pipe这仅限于您正在编辑的文件。

你可以实现的另一个解决scheme是有一个非常好的testing套件(不幸的是很less发生),然后用例行程序包装这个例程。 如果得到弃用输出,则意味着该例程被调用,所以仍然在某处使用。 即使对于reflection行为,这也是有效的,但是当你执行例行调用时你不能确定是否触发了这种情况。