如何指定conda构建包对应的git分支源
解决方案
你可以通过两种路径实现需求,分别对应修改versioneer版本规则、调整conda安装/构建规则:
方案1:自定义versioneer版本号规则,让master分支版本优先级更高
conda的版本排序遵循PEP440规范,你可以通过配置versioneer,让master分支生成的版本号天然比其他分支同进度的版本号优先级更高,这样conda默认就会优先安装master分支的最新构建:
- 首先在项目的
setup.cfg或者versioneer.cfg中启用自定义版本样式,或者直接修改项目根目录下的versioneer.py中的版本格式化逻辑,核心规则参考:- 当检测到当前构建对应git分支为master时,生成标准的
主版本号.次版本号.修订号.dev<距离最新tag的提交数>格式的版本号,例如上一个tag为v2.1.0,master分支后续有5次提交,版本号为2.1.1.dev5 - 当检测到非master分支构建时,在版本号后追加低优先级标识,例如将dev序号叠加一个足够大的固定值(比如10000),同时增加分支名后缀,同进度的dev分支版本号会生成为
2.1.1.dev10005+dev,PEP440排序中dev5优先级高于dev10005,自然会优先选择master分支版本
- 当检测到当前构建对应git分支为master时,生成标准的
- 注意构建包时需要保留完整git仓库信息(不要使用浅克隆),否则versioneer无法正确读取分支名。
方案2:通过conda构建/安装规则区分分支
如果你不想调整版本号生成逻辑,也可以通过conda侧的配置实现需求:
- 第一种方式:构建时给不同分支的包设置不同的build标识,比如master分支的构建设置build字符串为
master_<构建号>,其他分支设置为<分支名>_<构建号>,安装时通过匹配build字符串筛选master分支的包,命令为:conda install "你的包名=*=*master*" - 第二种方式:使用独立的conda channel区分不同分支的构建,master分支的构建包推送到优先级更高的主channel,其他分支推送到测试channel,conda默认会优先从高优先级channel拉取包,自然就会安装master分支的最新版本。
内容的提问来源于stack exchange,提问作者BayesianMonk
相关产品推荐
相关产品推荐

