Conda Constructor构建RHEL离线conda安装包时jaraco重复文件报错解决问询
Conda Constructor 构建jaraco文件冲突的可行绕行方案
方案1:显式锁定冲突包到无问题版本
- 冲突根源是jaraco 3.1.0系列版本打包失误,把本该作为包目录标识的空文件
jaraco/__init__.py重复打进了三个独立的子包,触发constructor的文件重复硬校验。直接在YAML配置的specs块追加版本锁定条目,强制conda跳过3.1.0版本即可 - 需添加的锁定配置参考:
- jaraco.functools ==3.0.1 - jaraco.collections ==3.0.0 - jaraco.classes ==3.0.0
- 上述版本不存在重复打包问题,且完全兼容cherrypy等依赖jaraco的上层组件,和你之前能正常构建的依赖树完全匹配
方案2:调整渠道优先级拉取修复后的包
- 修改channels配置的顺序,优先从已修正jaraco打包错误的渠道源拉取依赖,避开main频道下的问题版本
- 调整后的channels配置参考:
channels: - 已完成jaraco打包修复的conda渠道源 - http://repo.anaconda.com/pkgs/main/
- 修复后的jaraco包与原3.1.0版本API完全一致,不会影响现有组件的运行兼容性
方案3:构建前清理重复文件
- 三个冲突包里的
jaraco/__init__.py是内容完全相同的空标识文件,可在构建流程中插入缓存清理步骤:- 等constructor拉完全部依赖包、开始生成安装包之前
- 遍历三个问题jaraco包的临时缓存目录,只在一个包内保留该空文件,删掉另外两个包里的重复文件
- 该操作不会破坏包的功能,重复携带空文件本身就是打包失误,删除后不会影响最终安装包的运行效果
方案4:复用历史构建依赖快照
- 拿出之前能正常构建时的conda依赖快照,把带3.1.0版本的三个jaraco包从本地快照的索引里删掉,构建时指定仅用这个本地快照作为依赖渠道
- 该方式能1:1复现之前的正常构建环境,不会引入额外的依赖变动
内容的提问来源于stack exchange,提问作者Robert Knight
相关产品推荐
相关产品推荐

