我对声明 Python 包需求的正确方法有些困惑。
未正式发布的新版本确实有预发布名称,例如0.2.3.dev20160513165655
.
当我们添加时,pip 非常聪明地安装预发行版--pre
选项,当我们构建开发分支时,我们确实使用它。主分支不使用它。
我发现如果我把foobar>=0.2.3
在需求文件中,即使我指定了 --pre 参数,也不会选择开发版本。
The 点子文档 https://pip.readthedocs.io/en/stable/reference/pip_install/#requirements-file-format在这里没有太多帮助,因为缺少指出有关预发布的任何内容。
我使用了 put 的方法foobar>0.2.2
与--pre
将安装预发行版。
即使这样,如果有点缺陷,因为如果我们发布像这样的修补程序0.2.2.1
它可能已经选择了它。
那么,处理这个问题的最佳方法是什么?
旁注:当我们发布版本(从开发到主控的拉取请求)时,我们非常希望不必修补需求文件。请记住,开发分支始终使用--pre
而主人却没有。
对于遇到这个问题的其他人来说,答案是在同一文档中 https://pip.readthedocs.io/en/stable/reference/pip_install/#pre-release-versions:
如果需求说明符包含预发布或开发版本(例如>=0.0.dev0
)然后 pip 将允许满足该要求的预发布和开发版本。这不包括 != 标志。
因此,指定>=0.2.3.dev0
或类似的应该选择“最新”预发行版。
请注意,如果您已经有0.2.3
已发布,它总是比预发布“更新”,例如0.2.3.dev20160513165655
. PEP 440 https://www.python.org/dev/peps/pep-0440/#developmental-releases说如下:
开发版本段由字符串组成.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
会看到它较新。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)