13

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

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

编辑

一些澄清/答复:

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

3 回答 3

3

我给你的第一个建议是用更强的模块化设计你的代码,这样你就可以拥有你想要保留在尽可能多的 python 模块/鸡蛋中的所有功能,使其灵活地拥有你所需要的每个你的项目。而且我认为这将是使您的代码易于管理和阅读的唯一方法。

也就是说,如果您真的想按照您在问题中描述的方式进行操作,据我所知,没有工具可以完全按照您所说的进行操作,因为这是一种不常见的使用模式。

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

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

于 2013-06-13T14:20:33.483 回答
1

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

于 2013-06-13T20:23:47.120 回答
-1

如果您的目的是不泄露代码,那么只需分发 python 编译的库,而不是它的源代码。无需手动清除代码调用,只需分发pyc文件的版本。如果您担心人们会拿走您的代码而不给您信誉,那么如果有其他选择,请不要给他们代码。

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

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

于 2013-06-13T14:14:05.120 回答