如何通过允许预发布来指定Python需求?

时间:2016-08-04 08:38:40

标签: python pip setuptools distutils

我对于宣布Python软件包要求的正确方法存在某种困惑。

未正式发布的新版本是否有预发布名称,如0.2.3.dev20160513165655

当我们添加--pre选项时,pip非常聪明地安装预发行版,当我们构建开发分支时,我们确实使用它。主分公司不使用它。

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

pip documentation在这方面没有太多帮助,因为缺少任何关于预发布的内容。

我使用放置foobar>0.2.2的方法与--pre一起安装预发行版。

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

那么,处理这个问题的最佳方法是什么?

附注:当我们进行发布(从开发到主服务器的拉取请求)时,非常希望不必修补需求文件。请记住,开发分支始终使用--pre而主服务器不使用。

1 个答案:

答案 0 :(得分:0)

对于遇到此问题的其他人,答案为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将其视为更新版本。