如何基于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
相关产品推荐
相关产品推荐

