如何在install_requires中指定版本范围(setuptools,distribute)

我想要一个包来取决于特定的版本范围,例如>= 0.5.0, < 0.7.0 。 是否有可能在install_requires选项,如果是这样,它应该是什么?

根据文档 ,你的语法应该正常工作。 该文件指出:

setuptoolspkg_resources使用通用语法来指定项目所需的依赖关系。 这个语法由一个项目的PyPI名称组成,可选地在方括号后跟随逗号分隔的“extras”列表,可选地,后面跟随逗号分隔的版本说明符列表。 版本说明符是运算符<,>,<=,> =,==或!=之后的一个版本标识符。

该文档给出了一个简单的例子:

 docutils >= 0.3 # comment lines and \ continuations are allowed in requirement strings BazSpam ==1.1, ==1.2, ==1.3, ==1.4, ==1.5, \ ==1.6, ==1.7 # and so are line-end comments 

为了扩大这个范围,如果你希望你的软件包需要大于0.3版本但小于0.5版本的docutils版本,那么这样的代码就可以工作:

 docutils >= 0.3, <=0.5 

两个额外的笔记。

  1. 该文档还指出冗余/重叠依赖性规范将在内部组合,所以docutils >= 0.3, >=0.2将被组合成docutils >= 0.3
  2. 另外,要注意指定相互冲突的版本号,这个版本号“毫无意义,因此可能会产生奇怪的结果”。 例如,我不知道你为什么会,但不要使用: docutils >= 0.3, <=0.2因为这是不可能的。

警惕不自主的testing。 程序包维护人员有时会在不发出警告的情况下向一般受众释放不兼容,不完整或破坏的a,b和c版本。 下一次你运行一个新的virtualenv setup.py ,你可能会拉下这些中毒鸡蛋之一,突然你的程序将中断。

为了减轻这种风险, 不要使用 foo >=0.3, <0.4样式声明,它具有纯数字上限。 <0.4仍然承认版本0.4a0,0.4a1,0.4b0,0.4c3等等。当你编写你的install_requires时,使用上限如<0.4a0 ,如foo >=0.3, <0.4a0

setuptools做一些意想不到的事情时,试着使用verlib来build模你的版本比较。 Verlib是一个很好的适合,只要你的版本是规范化和非矛盾的。 下面是一个演示规范化版本潜在的反直觉sorting的例子:

 #!/usr/bin/env python from verlib import NormalizedVersion as V assert (V("0.7.9") < V("0.8a0") < V("0.8a1") < V("0.8b0") < V("0.8b1") < V("0.8b2") < V("0.8.0") < V("0.8.1a0") < V("0.8.1") < V("0.9") < V("1.0a3") < V("1.0b2") < V("1.0b20") < V("1.0c0") < V("1.0") < V("1.0.1")) assert (V("0.7.9") < V("0.8.0a0") < V("0.8.0a1") < V("0.8.0b0") < V("0.8.0b1") < V("0.8.0b2") < V("0.8.0") < V("0.8.1a0") < V("0.8.1") < V("0.9") < V("1.0a3") < V("1.0b2") < V("1.0b20") < V("1.0c0") < V("1.0") < V("1.0.1")) print "Version comparisons are sane."