如何处理多个主要版本的依赖

How to handle multiple major versions of dependency

我想知道如何处理依赖库的多个主要版本。

我有一个处于早期发布阶段的开源库 Foo。该库是另一个开源库 Bar 的包装器。 Bar 刚刚推出了一个新的主要版本。 Foo目前只支持之前的版本。由于我猜想很多人从 Bar 以前的主要版本转换到新的主要版本会很慢,我不愿意自己切换到新版本。

如何最好地处理这个问题?正如我所见,我有这些选择

  1. 切换到新的主要版本,可能会拒绝使用旧版本的人。
  2. 继续使用旧版本,可能会拒绝使用新版本的人。
  3. 有两个不同的分支,更新所有新功能的两个分支。不确定这如何与 PyPi 一起使用。难道我每次都必须发布不同的版本号吗?
  4. 将存储库分成两部分。真的不想这样做。

对我来说理想的解决方案是拥有相同的代码库,在那里我可以拥有某种类似 C/C++ 宏的东西,如果版本是 new,请使用 new_bar_function,否则使用 old_bar_function。从 PyPi 安装库时,已安装的主要版本决定了使用哪个版本。如果没有安装版本,请安装最新版本。

非常感谢一些指点。

通常情况下,使用 package.__version__ 导入后包版本信息可用。您可以从 Bar 解析该信息并根据此决定要做什么(选择适当的函数调用或停止程序或引发错误或...)。

您还可以从 https://www.python.org/dev/peps/pep-0518/ 中获得一些关于控制依赖项安装的方法的见解。

似乎如果有人已经安装了 Bar,安装 Foo 只会更新 Bar 如果 Foo 明确需要新版本。参见 https://github.com/pypa/pip/pull/4500 and this answer

Have two different branches, updating both branches for all new features. Not sure how this works with PyPI. Wouldn't I have to release at different version numbers each time?

是的,您可以同时发布 1.x 版本(支持旧版本)和 2.x 版本(支持新版本)。对于想要引入重大更改但仍希望继续维护以前版本的包来说,这是一种常见模式。