Python 在setup.py需求中提供pytz版本 问题

Python 在setup.py需求中提供pytz版本 问题,python,distutils,setup.py,pytz,Python,Distutils,Setup.py,Pytz,我想在我的库中的setup.py脚本中包含对pytz的要求,但还想设置所需的最低版本。但是pytz模块使用的版本号(例如“2012f”)似乎与distutils想要提供的版本号不兼容(例如“1.1.3”) 是否有任何方法可以在不更改pytz或distutils的情况下,包括对pytz特定版本的要求(例如=2012f) 细节 为此,我在setup.py文件中执行了类似的操作: 设置( #…基本数据在此。。。 需要=[ “pytz(>=2012f)”, ], #…这里还有一些其他数据。。。 ) 但

我想在我的库中的
setup.py
脚本中包含对
pytz
的要求,但还想设置所需的最低版本。但是
pytz
模块使用的版本号(例如“
2012f
”)似乎与
distutils
想要提供的版本号不兼容(例如“
1.1.3
”)

是否有任何方法可以在不更改
pytz
distutils的情况下,包括对
pytz
特定版本的要求(例如
=2012f

细节 为此,我在
setup.py
文件中执行了类似的操作:

设置(
#…基本数据在此。。。
需要=[
“pytz(>=2012f)”,
],
#…这里还有一些其他数据。。。
)
但是,当我在执行sudo python setup.py安装时,出现了以下错误:

回溯(最近一次呼叫最后一次):
文件“setup.py”,第25行,在
长描述=长描述,
文件“/usr/lib/python2.7/distutils/core.py”,第112行,在安装程序中
_设置\u分布=dist=klass(属性)
文件“/usr/lib/python2.7/distutils/dist.py”,第259行,在__
getattr(self.metadata,“set_”+键)(val)
文件“/usr/lib/python2.7/distutils/dist.py”,第1220行,在集合中
distutils.versionpredicate.versionpredicate(v)
文件“/usr/lib/python2.7/distutils/versionpredicate.py”,第115行,在__
self.pred=[str.split(“,”)中aPred的拆分(aPred)]
文件“/usr/lib/python2.7/distutils/versionpredicate.py”,第25行,拆分
返回(comp,distutils.version.StrictVersion(verStr))
文件“/usr/lib/python2.7/distutils/version.py”,第40行,在__
self.parse(vstring)
解析中第107行的文件“/usr/lib/python2.7/distutils/version.py”
raise VALUERROR,“版本号“%s”无效%v字符串
ValueError:版本号“2012f”无效
问题似乎是由试图匹配此正则表达式的
distutils
引起的:

version\u re=re.compile(r'^(\d+)\(\d+)(\.(\d+)))([ab](\d+)))$,
关于(冗长的)
如果不匹配,则会出现上述错误

我见过有人修改了
pytz
(将版本改成更像
2012.6
)的源代码,但我觉得这是一个非常糟糕的主意。我希望我错过了另一条路

pytz(>=2012f)
更改为
pytz
是可行的,但它不会将要求限制为
pytz
模块的特定版本。

使用:


您可以使用setuptools/distribute中的
install\u requires='pytz>=2012f'
。distutils忽略此选项(发出警告,您可以有条件地包括该选项)。无论如何,
distutils
不会安装依赖项
pip安装
使用setuptools/distribute,因此它将自动提取依赖项。顺便说一句,不要使用sudo python setup.py install
没有卸载选项(pip有uninstall命令。也可以使用virtualenv进行安装测试)。是的,不要使用requires。有一个公开的bug,可以让Python文档针对这些未使用的字段(requires、provides和obsoletes)发出警告。现在,您必须使用第三方工具(如pip、setuptools或buildout)来声明您的依赖关系,将来新标准(需要dist)将得到这些工具的支持。@Ericaraujo:我需要以某种方式将私有模块(“moduleA”)分发给一些私有项目(比如一个称为“projectB”)。当前的方法是在“projectB”中使用
requirements.txt
文件,并包括类似“
git”的内容+ssh://github.com/myName/moduleA
”然后使用
pip install-r requirements.txt安装项目中的每个依赖项。如何确保还将安装依赖项?通过将requires更改为install\u requires?还是使用稍微不同的方法?如果您能给我一些建议,我将不胜感激。@J.F.塞巴斯蒂安:您觉得我的工作怎么样?如果我将包含私有Git存储库的路径,那么
pip install-r requirements.txt是否会以当前形式处理依赖项?如果没有,我可以更改什么?@Tadeck:install\u需要告诉pip要安装哪些依赖项,但不知道在哪里可以找到它们。有dependency_links setuptools选项,但requirements.txt可能更方便(允许从不同的位置安装相同的软件包,例如stable和dev)。链接中需要
#egg…
setup(
    # ... basic data here ...
    install_requires='pytz>=2012f', # distutils ignores it with a warning, pip uses it
    # ... some other data here ...
)