5

問題

ライブラリpytzにスクリプト内の要件を含めたかったのですが、必要な最小バージョンも設定したかったのです。しかし、モジュールsetup.pyで使用されているバージョン番号(例: " ") は、提供したいもの (例: " ") と互換性がないようです。pytz2012fdistutils1.1.3

またはを変更せずにpytz、特定のバージョンの要件を含める方法はありますか?>=2012fpytzdistutils

詳細

setup.pyそのために、ファイルで次のようなことを行いました。

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

しかし、私がやっていたときに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'

この問題は、次のdistutils正規表現に一致させようとすることが原因のようです。

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

一致しない場合、上記のエラーが発生します。

のソース コードpytzを変更する (バージョンをより似たものに変更する2012.6) 人を見たことがありますが、それは非常に悪い考えのように思えます。私が逃した別の方法があることを願っています。

に変更pytz (>=2012f)すると機能しますが、要件が特定のバージョンのモジュールpytzに限定されるわけではありません。pytz

4

1 に答える 1

2

install_requiressetuptools オプションの使用:

setup(
    # ... basic data here ...
    install_requires='pytz>=2012f', # distutils ignores it with a warning, pip uses it
    # ... some other data here ...
)
于 2012-10-18T18:18:36.173 に答える