我对于宣布Python软件包要求的正确方法存在某种困惑。
未正式发布的新版本是否有预发布名称,如0.2.3.dev20160513165655
。
--pre
选项时,pip非常聪明地安装预发行版,当我们构建开发分支时,我们确实使用它。主分公司不使用它。
我发现如果我将foobar>=0.2.3
放在一个需求文件中,即使我指定了--pre参数,也不会选择开发版本。
pip documentation在这方面没有太多帮助,因为缺少任何关于预发布的内容。
我使用放置foobar>0.2.2
的方法与--pre
一起安装预发行版。
即使这有点有缺陷,因为如果我们发布像0.2.2.1
这样的修补程序,它可能已经选择了它。
那么,处理这个问题的最佳方法是什么?
附注:当我们进行发布(从开发到主服务器的拉取请求)时,非常希望不必修补需求文件。请记住,开发分支始终使用--pre
而主服务器不使用。
答案 0 :(得分:0)
对于遇到此问题的其他人,答案为in the same documentation:
如果需求说明符包含预发布或开发版本(例如
>=0.0.dev0
),则pip将允许该需求的预发布和开发版本。这不包括!=标志。
因此,指定>=0.2.3.dev0
或类似名称应选择“最新的”预发行版本。
请注意,如果您已经发布了0.2.3
,它将总是比“ 0.2.3.dev20160513165655
”这样的预发布版本“更新”。 PEP 440说:
开发发行版由字符串
.dev
组成,后跟一个非负整数值。开发发布按其数字成分排序,紧接在相应发布之前(以及具有相同发布段的任何预发布之前),以及任何先前的发布(包括任何后发布)之后。
它也说:
...强烈建议不要将预发行版的开发发行版发布到通用公共索引服务器,因为这会使人类读者难以解析版本标识符。如果需要发布这样的发行版,则通过增加数字部分来创建新的预发行版要明显得多。
强烈建议不要发布发布后的开发版本...
因此,理想情况下,您将不使用日期戳,而应使用dev1
,dev2
,dev3
之类的日期戳。我认为PEP实际上是在说您应该使用0.2.3.dev1
,0.2.4.dev1
,0.2.5.dev1
,但是两者都可读。这实际上取决于您要生产多少个版本。
在您的情况下,如果0.2.3
已经发布,则所有后续开发版本都需要为0.2.4.dev20160513165655
,以便pip
将其视为更新版本。