【发布时间】:2020-10-09 14:49:41
【问题描述】:
大多数 Python 包都遵循在 [package_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')
虽然这似乎可行,但它需要我先导入包,然后才能检查版本。如果条件不满足就不用导入包就好了。
这似乎也有点“hacky”,感觉可能有一种使用 Python 标准库的方法可以做到这一点。像version('numpy') > '1.18.1' 这样的东西。但是一直没找到。
有没有办法在 Python 标准库的范围内导入包之前检查它的版本?
我正在寻找 Python 代码中的编程解决方案。告诉我使用 requirements.txt 或 pip install 不是在回答问题。
编辑以添加上下文:将此包添加到我的requirements.txt 没有用,因为导入的包应该是可选的依赖项。此代码将进入一个子模块,该子模块通过try 语句可选地加载到__init__.py 中。本质上,该包的某些功能只有在找到并成功导入最低版本的包时才可用。
【问题讨论】:
-
通常使用
requirements.txt文件或最近使用python-poetry 来管理项目中的版本来控制他们获得的软件包版本。不过,这并不能回答您关于如何在 python 代码中处理它的问题。 -
就我而言,我关心的是可选依赖项。所以,我不能在
requirements.txt中列出包,但是如果存在可选依赖项,我的包中有子模块会被加载。 -
pip show package或pip list?我想有一个与您的问题相关的 SO Q&A。 -
从我的帖子中很明显我正在寻找 Python 中的编程解决方案。
-
也许这个问题的答案可能会有所帮助stackoverflow.com/questions/11887762/…
标签: python python-3.x versioning