如何处理多个主要版本的依赖
How to handle multiple major versions of dependency
我想知道如何处理依赖库的多个主要版本。
我有一个处于早期发布阶段的开源库 Foo
。该库是另一个开源库 Bar
的包装器。 Bar
刚刚推出了一个新的主要版本。 Foo
目前只支持之前的版本。由于我猜想很多人从 Bar
以前的主要版本转换到新的主要版本会很慢,我不愿意自己切换到新版本。
如何最好地处理这个问题?正如我所见,我有这些选择
- 切换到新的主要版本,可能会拒绝使用旧版本的人。
- 继续使用旧版本,可能会拒绝使用新版本的人。
- 有两个不同的分支,更新所有新功能的两个分支。不确定这如何与 PyPi 一起使用。难道我每次都必须发布不同的版本号吗?
- 将存储库分成两部分。真的不想这样做。
对我来说理想的解决方案是拥有相同的代码库,在那里我可以拥有某种类似 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 版本(支持新版本)。对于想要引入重大更改但仍希望继续维护以前版本的包来说,这是一种常见模式。
我想知道如何处理依赖库的多个主要版本。
我有一个处于早期发布阶段的开源库 Foo
。该库是另一个开源库 Bar
的包装器。 Bar
刚刚推出了一个新的主要版本。 Foo
目前只支持之前的版本。由于我猜想很多人从 Bar
以前的主要版本转换到新的主要版本会很慢,我不愿意自己切换到新版本。
如何最好地处理这个问题?正如我所见,我有这些选择
- 切换到新的主要版本,可能会拒绝使用旧版本的人。
- 继续使用旧版本,可能会拒绝使用新版本的人。
- 有两个不同的分支,更新所有新功能的两个分支。不确定这如何与 PyPi 一起使用。难道我每次都必须发布不同的版本号吗?
- 将存储库分成两部分。真的不想这样做。
对我来说理想的解决方案是拥有相同的代码库,在那里我可以拥有某种类似 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 版本(支持新版本)。对于想要引入重大更改但仍希望继续维护以前版本的包来说,这是一种常见模式。