Python 依赖项:将两个包合并为一个
Python dependencies: Merging two packages into one
我有两个 python 包 A
和 B
,我想将它们合并到 A
中,即 B
的所有功能现在都是可在 A.B
内到达。以前,A-1.0
依赖于 B-1.0
。现在我想避免 A-2.0
的用户仍然安装了 B-1.0
而我不知道如何正确处理它。
不同solutions/ideas我想出了:
在 A-2.0
中包含一些尝试导入 B
的代码,如果引发 ImportError,捕获异常并继续,否则抛出 [=12] 的 RuntimeError =]并行安装
以某种方式将 B
标记为 A-2.0
的阻止程序(这可能吗?)
为 B
创建一个 "fake" 继任者,以便更新虚拟环境或安装 B
的 "latest" 版本的人得到一个空的导入时抛出异常的包。
我欢迎您的意见和经验
我想,你做不到! (至少没有像你描述的那样使用这些技巧)。
Python 包系统(据我所知)没有 "allowed" 包这样的概念。可能有人发明了一个不同的包 C,他称之为 B,但功能完全不同。这样的概念会禁止您的包 A 的用户使用包 C(别名 B)。
所以我会与 A 的用户沟通,不再需要 B,并确保您的新编码根本不引用 B。而当有人安装B时,它就像一个与你无关的第三方库。
当然,当 A 和 B 的功能非常混合并且其他用户代码也必须直接处理 B 并且对 A 有(允许)副作用时,当旧的 B 时您可能会遇到麻烦仍然安装。但是你最初的设计也不是最好的。
在这种情况下(当你真的必须合并包时——见下文)我建议你创建一个全新的包名称,如 "newA" 来强调这样一个事实,即某些东西已经从根本上改变了(因此也更有可能检测到旧 A 和 B 之间的混合)。
但是,当然,我会支持 msw 的论点,即您自己造成了问题。通常情况下,使用较小的包(当然,如果它们的大小合理)也比使用较大的 "I manage the world" 包更好。您可以针对不同的应用更好地组合较小的封装。
我有两个 python 包 A
和 B
,我想将它们合并到 A
中,即 B
的所有功能现在都是可在 A.B
内到达。以前,A-1.0
依赖于 B-1.0
。现在我想避免 A-2.0
的用户仍然安装了 B-1.0
而我不知道如何正确处理它。
不同solutions/ideas我想出了:
在
A-2.0
中包含一些尝试导入B
的代码,如果引发 ImportError,捕获异常并继续,否则抛出 [=12] 的 RuntimeError =]并行安装以某种方式将
B
标记为A-2.0
的阻止程序(这可能吗?)为
B
创建一个 "fake" 继任者,以便更新虚拟环境或安装B
的 "latest" 版本的人得到一个空的导入时抛出异常的包。
我欢迎您的意见和经验
我想,你做不到! (至少没有像你描述的那样使用这些技巧)。
Python 包系统(据我所知)没有 "allowed" 包这样的概念。可能有人发明了一个不同的包 C,他称之为 B,但功能完全不同。这样的概念会禁止您的包 A 的用户使用包 C(别名 B)。
所以我会与 A 的用户沟通,不再需要 B,并确保您的新编码根本不引用 B。而当有人安装B时,它就像一个与你无关的第三方库。
当然,当 A 和 B 的功能非常混合并且其他用户代码也必须直接处理 B 并且对 A 有(允许)副作用时,当旧的 B 时您可能会遇到麻烦仍然安装。但是你最初的设计也不是最好的。
在这种情况下(当你真的必须合并包时——见下文)我建议你创建一个全新的包名称,如 "newA" 来强调这样一个事实,即某些东西已经从根本上改变了(因此也更有可能检测到旧 A 和 B 之间的混合)。
但是,当然,我会支持 msw 的论点,即您自己造成了问题。通常情况下,使用较小的包(当然,如果它们的大小合理)也比使用较大的 "I manage the world" 包更好。您可以针对不同的应用更好地组合较小的封装。