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

min*_*hee 41 python setuptools

我想制作一个包依赖于特定的版本范围,例如>= 0.5.0, < 0.7.0.是否有可能在install_requires选项中,如果是这样,应该如何?

Ric*_*ano 37

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

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
Run Code Online (Sandbox Code Playgroud)

要进行扩展,如果您希望您的软件包要求版本docutils大于0.3但小于0.5版,那么这样的代码将起作用:

docutils >= 0.3, <=0.5
Run Code Online (Sandbox Code Playgroud)

另外两个笔记.

  1. 文档还指出冗余/重叠依赖规范将在内部组合,因此docutils >= 0.3, >=0.2将合并到docutils >= 0.3.
  2. 另外,要注意指定冲突的版本号,这些版本号"没有意义,因此可能产生奇怪的结果".例如,我不知道你为什么会,但不要使用它:docutils >= 0.3, <=0.2因为这是不可能的.

  • 很好的答案,但令我困惑的是,逗号有时意味着**或**,有时**和**:精确版本规范列表清楚地说'1.1或1.2或......'并且组合`> = 0.3, > = 0.2`只是`> = 0.2`才有意义.但是`> = 0.3,<= 0.5`或你的段落有关矛盾的版本规格需要逗号来表示**和**. (3认同)

Mik*_*e B 15

警惕非自愿的beta测试.软件包维护者有时会在不发出警告的情况下向一般受众发布不兼容,不完整或损坏的a,b和c版本.下次你在一个新鲜的virtualenv中运行setup.py时,你可能会拉下其中一个有毒的蛋,突然你的程序会崩溃.

要降低此风险,请不要使用foo >=0.3, <0.4具有纯数字上限的样式声明.<0.4仍然允许版本0.4a0,0.4a1,0.4b0,0.4c3等.相反,<0.4a0foo >=0.3, <0.4a0编写install_requires时使用上限,例如,如.

setuptools出现意外情况时,请尝试使用verlib为您的版本比较建模.只要您的版本标准化且不矛盾,Verlib就非常适合.这是一个示例,演示了规范化版本的潜在反直觉排序:

#!/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."
Run Code Online (Sandbox Code Playgroud)

  • 你如何在setup.py文件中使用verlib(`install_requires`)? (2认同)