gpt4 book ai didi

Python 依赖项 : Merging two packages into one

转载 作者:行者123 更新时间:2023-11-28 18:39:23 25 4
gpt4 key购买 nike

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

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

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

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

  • B 创建一个“假”继任者,这样更新他们的虚拟环境或安装“最新”版本的 B 的人就会得到一个空包导入时抛出异常。

我欢迎你的意见和经验

最佳答案

我想,你不能! (至少没有像您描述的那样使用此类技巧)。

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

因此,我会与 A 的用户沟通,不再需要 B,并确保您的新编码根本不引用 B。当有人安装 B 时,它就像一个与您无关的第三方库。

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

在这种情况下(当你真的必须合并包时——见下文)我建议你创建一个全新的包名称,如“newA”来强调这样一个事实,即某些东西已经从根本上改变了(并且因此,旧 A 和 B 之间的混合也更有可能被检测到。

但是,当然,我会支持 msw 的论 pip ,即您自己造成了问题。通常情况下,使用较小的包(当然,如果它们的大小合理)也比使用较大的“我管理世界”包更好。您只是可以针对不同的应用更好地组合较小的封装。

关于Python 依赖项 : Merging two packages into one,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28456493/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com