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

时间:2019-04-04 15:23:11

标签: python pip dependencies wrapper pypi

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

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

如何最好地处理?在我看来,我有这些选择

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

对我来说,理想的解决方案是使用相同的代码库,其中可以使用类似C / C ++宏的内容,如果版本为new,则使用new_bar_function,否则使用old_bar_function。从PyPi安装库时,主要版本的已安装版本指示使用哪个版本。如果未安装任何版本,请安装最新版本。

非常感谢一些指导。

2 个答案:

答案 0 :(得分:1)

通常,在使用package.__version__导入后,软件包版本信息可用。您可以解析来自Bar的信息,并据此决定要做什么(选择适当的函数调用或暂停程序或引发错误或...)。

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

似乎如果某人已经安装了Bar,则安装Foo仅在Bar明确要求使用新版本的情况下才更新Foo。请参见https://github.com/pypa/pip/pull/4500和此answer

答案 1 :(得分:1)

  

具有两个不同的分支,为所有新功能更新两个分支。不确定如何使用PyPI。每次都不必以不同的版本号发布吗?

是的,您可能有一个1.x发行版(支持旧版本)和2.x发行版(支持新版本),并且同时发行了这两个版本。对于希望引入重大更改但仍希望继续保持先前版本的软件包,这是一种常见的模式。