sor*_*rin 6 python distutils pip setuptools
我对声明 Python 包要求的正确方法有些困惑。
未正式发布的新版本确实具有预发布名称,例如0.2.3.dev20160513165655
.
pip 在我们添加--pre
选项时安装预发布版本非常聪明,当我们构建开发分支时,我们确实使用它。主分支不使用它。
我发现如果我放入foobar>=0.2.3
需求文件,即使我指定了 --pre 参数,也不会选择开发版本。
该PIP文档是没有帮助这里太多,因为缺少约预发行点什么。
我使用了将foobar>0.2.2
which 与--pre
将安装预发行版结合使用的方法。
即使这个有点缺陷,因为如果我们发布一个像0.2.2.1
它这样的修补程序可能已经选择了它。
那么,处理这个问题的最佳方法是什么?
旁注:当我们发布版本(从开发到主的拉取请求)时,非常希望不必修补需求文件。请记住,develop 分支一直在使用--pre
,而 master 则没有。
Sco*_*ens 13
对于遇到这个问题的其他人,答案在同一个文档中:
如果需求说明符包含预发布或开发版本(例如
>=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
将其视为较新的。