You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何基于pip实现Python库版本与requirements.txt要求的校验函数

验证Python库版本是否满足requirements要求的实现

要实现这个版本验证函数,我们可以复用pip依赖的packaging库(pip本身就依赖该库,无需额外安装),利用其成熟的版本解析和验证逻辑,避免重复造轮子。

函数实现

from packaging.requirements import Requirement
from packaging.version import Version, InvalidVersion

def is_satisfied(name: str, version: str, requirement: str) -> bool:
    try:
        # 解析requirements格式的字符串
        req = Requirement(requirement)
    except ValueError:
        # 无效的requirement格式,直接返回不满足
        return False
    
    # 检查包名是否匹配(忽略大小写,和pip的处理逻辑一致)
    if req.name.lower() != name.lower():
        return False
    
    try:
        # 解析当前包的版本号
        pkg_version = Version(version)
    except InvalidVersion:
        # 无效的版本号格式,返回不满足
        return False
    
    # 验证版本是否符合所有规格要求
    return pkg_version in req

测试用例验证

运行以下测试用例可确认函数逻辑正确:

assert not is_satisfied("pandas", "1.2.0", "sklearn")
assert is_satisfied("pandas", "1.2.0", "pandas")
assert is_satisfied("pandas", "1.2.0", "pandas>=1,<2")
assert not is_satisfied("pandas", "1.2.0", "pandas>2")
assert not is_satisfied("pandas", "1.2.0", "pandas==1.2.1")

说明

  • 该函数复用了pip生态的成熟组件,无需自行编写版本比较逻辑,简洁且可靠
  • 处理了无效的requirement格式和版本号格式,覆盖了常见边界情况
  • 包名比较忽略大小写,符合pip实际的依赖处理规则

内容的提问来源于stack exchange,提问作者BD AC

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.01 17:22:19