【问题标题】:Supporting multiple versions of a Python dependency支持 Python 依赖项的多个版本
【发布时间】:2019-09-03 13:09:30
【问题描述】:

我是一个开源库 (N) 的作者,它为流行的 Python 库 (P) 提供了增强功能。最近,P 发布了一个新版本,他们更改了一些影响我的库 N 的代码。

我对 N 有一个简单的修复,使其与新版本的 P 兼容,但我想知道是否有一种好方法可以在我的库中支持两个版本的 P 而无需求助于 if-else-ing不同的版本。展望未来,我想同时支持库 P 的两个版本,因此不能只迁移到新版本。

【问题讨论】:

  • 在虚拟环境中使用适用于您的库的版本..与新版本相同
  • 虚拟环境对我有什么帮助?我希望人们能够根据他们安装的 P 版本动态安装包,或者如果失败,则能够在我的代码中优雅地支持多个版本。
  • 那么你必须提供两个版本并在构建你的包之前检查安装了哪些依赖项

标签: python import dependencies version


【解决方案1】:

许多包都有__version__ 属性。

您可以使用模块/类/子类来优雅地支持多个版本,但您可能仍然需要一个 if-else 来加载正确的实现。

import marshmallow        
from packaging import version

if version.parse(marshmallow.__version__) >= version.parse("3.0.0"):
    import new_implementation as impl
else:
    import old_implementation as impl

impl.foo()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-02
    • 2018-04-28
    • 2018-02-13
    • 2020-12-31
    • 1970-01-01
    • 2016-05-24
    相关资源
    最近更新 更多