在setup.py要求中提供pytz版本

Tad*_*eck 5 python distutils pytz setup.py

问题

我想包括要求pytzsetup.py我的图书馆中的脚本,但希望也设置所需的最低版本.但是pytz模块使用的版本号(例如" 2012f")似乎与distutils想要提供的版本号(例如" ")不兼容1.1.3.

是否有任何方法可以包含对特定版本pytz(例如>=2012f)的要求而不改变pytzdistutils

细节

要做到这一点,我在setup.py文件中做了类似的事情:

setup(
    # ... basic data here ...
    requires=[
        'pytz (>=2012f)',
    ],
    # ... some other data here ...
)
Run Code Online (Sandbox Code Playgroud)

但是当我这样做时sudo python setup.py install,出现以下错误:

Traceback (most recent call last):
  File "setup.py", line 25, in <module>
    long_description=long_description,
  File "/usr/lib/python2.7/distutils/core.py", line 112, in setup
    _setup_distribution = dist = klass(attrs)
  File "/usr/lib/python2.7/distutils/dist.py", line 259, in __init__
    getattr(self.metadata, "set_" + key)(val)
  File "/usr/lib/python2.7/distutils/dist.py", line 1220, in set_requires
    distutils.versionpredicate.VersionPredicate(v)
  File "/usr/lib/python2.7/distutils/versionpredicate.py", line 115, in __init__
    self.pred = [splitUp(aPred) for aPred in str.split(",")]
  File "/usr/lib/python2.7/distutils/versionpredicate.py", line 25, in splitUp
    return (comp, distutils.version.StrictVersion(verStr))
  File "/usr/lib/python2.7/distutils/version.py", line 40, in __init__
    self.parse(vstring)
  File "/usr/lib/python2.7/distutils/version.py", line 107, in parse
    raise ValueError, "invalid version number '%s'" % vstring
ValueError: invalid version number '2012f'
Run Code Online (Sandbox Code Playgroud)

看似问题是由于distutils尝试匹配此正则表达式引起的:

version_re = re.compile(r'^(\d+) \. (\d+) (\. (\d+))? ([ab](\d+))?$',
                        re.VERBOSE)
Run Code Online (Sandbox Code Playgroud)

当它不匹配时,会引发上述错误.

我看到人们改变了源代码pytz(将版本更改为更像的东西2012.6),但对我来说这看起来非常糟糕.我希望我错过了另一种方式.

转换pytz (>=2012f)pytz工作,但它不会将要求限制为特定版本的pytz模块.

jfs*_*jfs 2

使用install_requiressetuptools 选项

setup(
    # ... basic data here ...
    install_requires='pytz>=2012f', # distutils ignores it with a warning, pip uses it
    # ... some other data here ...
)
Run Code Online (Sandbox Code Playgroud)