首页 > 解决方案 > 如果版本更改会破坏代码,则支持一个包的多个版本

问题描述

我有一个使用Biopython包的 Python3 项目。它的一个模块在最新版本中被删除了,所以我必须更改一小段代码来支持这个更改。另一方面,这种更改会破坏我对所有“旧”版本的 Biopython(在生产系统上大量使用)的代码。

我的问题:

  1. 处理这个问题的正确方法是什么?

  2. 如果这是有道理的:我如何同时支持新旧软件包版本?我是否执行运行时检查以查看我有哪个版本然后运行不同的代码?或者这是一个坏主意?如果您认为这是要走的路:是否有标准的方法来做到这一点?

标签: python-3.xmodule

解决方案


确保特定版本存在的最简单方法是将该版本固定在您的requirements.txt文件(或其他依赖项规范)中。有很多系统依赖于旧版本的软件包,特别是对于没有任何安全隐患的软件包,这是完全合理的。

如果支持多个版本是您的目标,您可以在包导入过程中、在__init__.py文件或其他地方执行一些基本检查。这种模式有些常见,特别适用于 Python 2 和 3 之间的版本兼容性:

def foo_function():
    return

try:
    import biopython.foo as foo
except (ImportError, AttributeError):
    foo = foo_function

foo()

我已经在 GitHub 上无数次地看到了这个——当然,现在我试图找到一个我找不到的例子——但是当我这样做时,我会用一个例子来更新这个答案。

编辑:如果它对 Numpy 来说足够好,它可能对我们其他人来说已经足够好了。numpy_base.pyi L7-13


推荐阅读