有没有一个工具可以删除Python中没有使用的函数?

时间:2013-06-13 13:02:48

标签: python

我有以下情况:我正在开发几个使用我编写的库模块的项目。库模块包含几个类和函数。在每个项目中,都使用了库的一些代码子集。

但是,当我为其他用户发布项目时,我只想放弃该项目使用的代码而不是整个模块。这意味着,对于给定的项目,我希望从库代码中删除未使用的库函数(即创建一个新的简化库)。是否有任何工具可以自动执行此操作?

修改

一些澄清/回复:

  1. 关于“你不应该这样做”的回复:最重要的是,在实践中,在我发布项目之前,我手动浏览库模块并删除未使用的代码。由于我们都是程序员,我们知道当您可以轻松地向计算机解释如何执行此操作时,没有理由手动执行某些操作。所以实际上,编写这样的程序是可能的,甚至不应该太难(是的,它可能不是超级一般)。我的问题是,在我开始考虑自己实施之前,是否有人知道这样的工具是否存在。此外,欢迎任何关于实施这一点的想法。
  2. 我不想简单地隐藏我的所有代码。如果我想这样做,我可能不会使用Python。实际上,我想发布源代码,但只发布与相关项目相关的代码。
  3. 关于“您受法律保护”的评论:在我的具体案例中,法律/许可证保护对我没有帮助。此外,这里的问题比一些窃取代码更普遍。例如,它可能是为了清楚起见:如果有人需要使用/开发代码,您不希望包含许多不相关的函数。

3 个答案:

答案 0 :(得分:3)

我给你的第一个建议就是设计一个更强大的模块化代码,这样你就可以拥有你想要保留的所有函数,就像你拥有的python模块/蛋一样,可以灵活地拥有你的代码。需要你的每个项目。我认为这是保持代码易于管理和阅读的唯一方法。

那就是说,如果你真的想按照你在问题中描述的方式去做,据我所知,没有任何工具可以完全按你所说,因为它是一种不常见的使用模式。

但我不认为使用rope编写使用它的工具并不困难。它执行静态和动态代码分析(因此您可以找到正在使用的导入对象,从而猜测导入的模块中没有使用的内容),还提供了许多重构工具来移动或删除代码。

无论如何,我认为能够真正创建一个工具来准确找到当前代码中正在使用的所有代码,您需要对代码进行完整的单元测试覆盖,否则您应该真正有条不紊地对待导入模块的代码(仅使用from foo import bar并避免在模块之间链接导入)。

答案 1 :(得分:2)

我同意@zmo - 避免未来出现问题的一种方法是提前计划并尽可能使代码尽可能模块化。我建议将类和函数放在更小的文件中。这意味着对于您制作的每个项目,您都必须手动选择要包含哪些较小的文件。我不确定这对你现在的项目规模是否可行。但对于未来的项目,这是你可以考虑的一种做法。

答案 2 :(得分:0)

如果您的目的是不放弃代码,那么只需分发python编译的库,而不是它的源代码。无需手动编写代码调用,只需分发文件的pyc版本即可。如果您担心人们会接受您的代码并且没有给您信任,那么如果有替代方案,请不要给他们代码。

那就是说,我们有许可证是有原因的。您将最小标题和您的属性放在每个文件的顶部,然后使用您的软件分发LICENSE文件,该文件清楚地表明人们是什么,而不是,允许您使用源代码。如果他们违反了这一点,并且你抓住了他们,那么你现在有了法律追索权。如果你不相信人们支持这种许可证:这就是它存在的全部原因。如果您的代码是如此独特以至于需要获得许可,以免其他人将其作为自己的代码传递出去,那么很容易发现违规行为。但是,如果您将所有代码都视为这样,那就是一个小小的现实检查:你不是那么好。你写的几乎没有任何东西是原创的,其他人还没有写过它,试图坚持它不会对你或其他任何人有所帮助。

最佳代码保护?坚持在网上让所有人都能看到,这样你就可以把其他人都指向它并“去看看那是我的代码。这个混蛋在他们自己的产品中使用它而不给我信任”。更糟糕的代码保护,但仍然保护:不分发代码,分发编译库。 (最糟糕的代码保护:分发gimped代码,因为你因为错误的原因而害怕世界)