确保导入的Python包的最低版本

确保导入的Python包的最低版本,python,python-3.x,versioning,Python,Python 3.x,Versioning,大多数Python软件包遵循的约定是,版本作为字符串提供在[package\u name].version.version。让我们以Numpy为例。假设我想导入Numpy,但确保最低版本为1.18.1。这就是我目前所做的: import numpy as np if tuple(map(int, np.version.version.split('.'))) < (1, 18, 1): raise ImportError('Numpy version too low! Must

大多数Python软件包遵循的约定是,版本作为字符串提供在
[package\u name].version.version
。让我们以Numpy为例。假设我想导入Numpy,但确保最低版本为
1.18.1
。这就是我目前所做的:

import numpy as np

if tuple(map(int, np.version.version.split('.'))) < (1, 18, 1):
    raise ImportError('Numpy version too low! Must be >= 1.18.1')
将numpy导入为np
如果元组(映射(int,np.version.version.split('.'))<(1,18,1):
raise ImportError('Numpy版本过低!必须大于等于1.18.1')
虽然这似乎可行,但它要求我在检查版本之前导入包。如果条件不满足,最好不必导入包

它看起来也有点“黑客”,感觉可能有一种方法使用Python标准库来实现这一点。类似于
version('numpy')>“1.18.1”
。但我还没找到

在Python标准库范围内导入包之前,是否有方法检查包的版本

我正在寻找Python代码的编程解决方案。告诉我使用
requirements.txt
pip安装
并没有回答这个问题



编辑以添加上下文:将此包添加到my
requirements.txt
中没有用处,因为导入的包应该是可选的依赖项。此代码将进入一个子模块,该子模块可以通过
try
语句选择性地加载到
\uuuu init\uuuuu.py
。本质上,只有找到并成功导入最低版本的包时,包的某些功能才可用。

使用容器控制程序的所有依赖项和运行时环境。一种简单的方法是创建一个Docker映像,其中包含您所需的python的确切版本。然后使用
requirements.txt
安装所需的正确python模块和精确版本

最后,您可以创建一个shell脚本或类似的东西,只需单击一下就可以实际启动docker容器


或者(如果Docker似乎有些过分),请使用子流程查看特定软件包的

Run
pip show
,然后解析结果以将安装的版本与您的要求进行比较

或者看看一切:

>>> result = subprocess.run(['pip', 'list'], stdout=subprocess.PIPE)
>>> for thing in result.stdout.splitlines():
    print(thing)

    
b'Package          Version   '
b'---------------- ----------'
b'-illow           6.2.1     '
b'aiohttp          3.6.2     '
b'appdirs          1.4.3     '
...

通常,可以通过
requirements.txt
文件或最近使用python诗歌管理项目中的版本来控制获得的包的版本。但是,这并没有回答您关于如何在python代码中处理它的问题。在我的例子中,我关心的是可选依赖项。因此,我不能在
requirements.txt
中列出包,但如果存在可选依赖项,我在包中有加载的子模块。
pip show package
pip list
?我想有一个与你的问题相关的问答。从我的帖子中可以明显看出,我正在寻找一个Python编程解决方案。也许这个问题的答案可能会有所帮助。从我的帖子中可以明显看出,我正在寻找一个Python编程解决方案。
>>> result = subprocess.run(['pip', 'list'], stdout=subprocess.PIPE)
>>> for thing in result.stdout.splitlines():
    print(thing)

    
b'Package          Version   '
b'---------------- ----------'
b'-illow           6.2.1     '
b'aiohttp          3.6.2     '
b'appdirs          1.4.3     '
...