Python依赖项:将两个包合并为一个

时间:2015-02-11 14:13:15

标签: python pip setuptools

我有两个python包AB,我想将它们合并到A中,即B的所有功能现在都可以在A.B中找到}。以前,A-1.0取决于B-1.0。现在我想避免,A-2.0的用户仍然安装了B-1.0,而且我不知道如何正确处理此问题。

我提出了不同的解决方案/想法:

  • A-2.0中包含一些试图导入B的代码,如果引发了ImportError,捕获异常并继续,否则抛出一个B已安装的RuntimeError

  • 以某种方式将B标记为A-2.0的阻止程序(是否可能?)

  • 创建"假" B的后继者,所以更新虚拟环境或安装"最新版本的人员。版本B获取一个空包,在导入时抛出异常。

我欢迎您的意见和经验

1 个答案:

答案 0 :(得分:1)

我想,你不能! (至少没有使用这些技巧,如你所描述的那样)。

Python包系统(据我所知)没有“允许”包这样的概念。可能有一个人发明了他称之为B的不同包C,但具有完全不同的功能。这样的概念会禁止包A的用户使用包C(别名B)。

所以我会告诉A的用户,不再需要B,并确保你的新编码根本不参考B.当有人安装B时,它就像是与你的无关的第三方库。

当然,当A和B的功能非常混杂而其他用户代码也必须直接处理B并且对A有(允许)副作用时,当旧的B仍然存在时你会遇到麻烦安装。但是你的初始设计也不是最好的。

在这种情况下(当你真的需要合并软件包时 - 见下文)我建议你创建一个全新的软件包名称,比如“newA”,以强调事实已经从根本上改变了(和因此,更有可能检测到旧A和B之间的混合。)

但是,当然,我会反驳msw的论点,即你自己创造问题。通常情况下,拥有更小的包装(当然,如果它们的尺寸合理)也更好,而不是更大的“我管理世界”包装。您可以针对不同的应用程序更好地组合较小的包。

相关问题