pip / setuptools / packing使用PEP440中定义的版本说明符来定义多个可能的范围

问题描述

Exclude certain dependency version ranges in setuptools/pip中的问题之后,我想知道是否存在使用多个范围来定义版本说明符(在PEP440中定义)支持的版本的方法。

采用以下用例:

我有一个依存关系,如果x小于3,则支持1.x版本;如果x大于1且小于或等于4,则支持2.x。v1.x系列仍处于活动状态,并且新版本将继续发布。

要提供一个测试用例:

import packaging.specifiers as s


def test_specifier_multiple_ranges():
    spec = s.SpecifierSet('THE ANSWER GOES HERE')

    # A dependency is supported for:
    #       versions 1.x,provided x is <3
    #       OR
    #       versions 2.x provided x is greater than 1 and less than or equal to 3
    # The v1.x series is still active,and new versions will continue to
    # be released.
    possible_versions = [
        '1.1','1.2','1.3','1.4','2.0','2.1','2.2','2.3','2.4','3.0'
    ]
    expected =  ['1.1','2.3']

    assert list(spec.filter(possible_versions)) == expected

请注意,我不是希望排除特定的版本,必须通过较高范围将其排除-条款“ v1.x系列仍处于活动状态”规则这样一来,由于在任何时候都可能会出现v1.5(在上述测试用例中),已知它不被支持。

请注意,在阅读https://github.com/pypa/pip/issues/2744处的错误报告以及PEP440的语法定义(据我所见,它没有任何OR功能)时,我期望这是不可能的。如果它可以明确引用此限制(例如在PEP440中),或者来自权威来源,我将接受这样的答案。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)