【问题标题】:How to specify Python requirements by allowing prereleases?如何通过允许预发布来指定 Python 要求?
【发布时间】:2016-08-04 08:38:39
【问题描述】:

我对声明 Python 包要求的正确方式有些困惑。

未正式发布的新版本确实具有预发布名称,例如 0.2.3.dev20160513165655

当我们添加--pre 选项并且当我们构建开发分支时我们确实使用它时,pip 安装预发行版真的很聪明。 master 分支不使用它。

我发现如果我将foobar>=0.2.3 放在需求文件中,即使我指定了 --pre 参数,开发版本也不会被选中。

pip documentation 在这里并没有太大帮助,因为它没有指出任何有关预发布的信息。

我使用了将foobar>0.2.2--pre 结合使用的方法来安装预发行版。

即使这有点缺陷,因为如果我们发布像 0.2.2.1 这样的修补程序,它可能已经选择了它。

那么,解决这个问题的最佳方法是什么?

旁注:我们非常希望在发布版本时不必修补需求文件(从开发到主控的拉取请求)。请记住,develop 分支总是使用--pre 而master 没有。

【问题讨论】:

    标签: python pip setuptools distutils


    【解决方案1】:

    对于遇到此问题的其他人,答案是in the same documentation

    如果需求说明符包含预发布或开发版本(例如>=0.0.dev0),则 pip 将允许该需求的预发布和开发版本。这不包括 != 标志。

    因此,指定 >=0.2.3.dev0 或类似名称应该选择“最新”的预发布版本。

    请注意,如果您已经发布了0.2.3,它将始终比0.2.3.dev20160513165655 等预发布版本“更新”。 PEP 440 说:

    开发版本段包含字符串.dev,后跟一个非负整数值。开发版本按其数字组成部分排序,紧接在相应版本之前(以及任何具有相同版本段的预发布之前),并在任何先前版本之后(包括任何后期版本)。

    它还说:

    ... 强烈建议不要将预发布的开发版本发布到通用公共索引服务器,因为这会使人类读者难以解析版本标识符。如果需要发布这样的版本,那么通过增加数字组件来创建新的预发布版本会更加清晰。

    也强烈反对后期发布的开发版本...

    因此,理想情况下,您不会使用日期戳,而是使用 dev1dev2dev3 之类的东西。我认为 PEP 实际上是在说您应该使用 0.2.3.dev10.2.4.dev10.2.5.dev1,但两者都具有同样的可读性。这实际上取决于您正在生成多少构建。

    在您的情况下,如果 0.2.3 已经发布,则所有后续开发版本都需要为 0.2.4.dev20160513165655,以便 pip 将其视为更新。

    【讨论】:

      猜你喜欢
      • 2011-11-01
      • 2017-01-04
      • 1970-01-01
      • 2020-06-09
      • 2021-09-01
      • 2014-12-20
      • 2020-03-15
      • 1970-01-01
      • 2014-12-12
      相关资源
      最近更新 更多