单Shell脚本创建2个Miniconda环境时收集包元数据挂起问题
问题描述
在面向SageMaker的AWS Linux实例上,需要通过单个Shell脚本创建2个基于Miniconda的Conda环境并完成依赖包安装。首个环境的创建与包安装流程可正常执行,但第二个环境会在Collecting package metadata (repodata.json): ...working... done阶段永久挂起。
该问题此前已有公开讨论及对应解决方案,但尝试过的所有公开方案均未生效。
已尝试的排查方案(均未解决问题)
- 移除频道源中的conda-forge:该操作引发严重的版本依赖冲突,且部分所需依赖包未收录于基础频道中,无法满足使用需求
- 执行
conda config --set channel_priority flexible调整频道优先级:未实际落地该操作,通过conda config --describe channel_priority查询确认当前频道优先级已经是flexible模式 - 提升实例运行内存:将实例内存扩容至原有配置的2倍后,挂起问题仍然存在
- 修改conda源码:编辑
conda/conda/core/subdir_data.py文件,调整Executor配置行,修改为当context.debug或context.repodata_threads == 1时使用DummyExecutor,修改后问题复现 - 安装Mamba替代Conda完成环境部署:运行时出现大量错误及依赖不一致警告,查询相关报错信息得知对应版本Mamba仅支持Python 2.7,而运行环境要求Python >= 3.7,无法适配使用
- 其余零散排查方案因时间较久已无明确记录,均未解决挂起问题
待解决疑问
- 是否有开发者通过单个脚本成功部署过1个以上的Conda环境?
- 上述conda创建第二个环境时的永久挂起问题应如何修复?
问题更新(供同类问题用户参考)
尝试所有方案均未解决问题后,偶然移除脚本中通过conda安装的snowflake connector包,后续安装流程得以继续推进;之后流程再次挂起时,排查日志发现触发问题的是snowflake-sqlalchemy包。虽不确定两个Snowflake生态相关包触发挂起是否为巧合,但最终将这两个包从conda安装列表中移除,改用pip方式安装后,整个脚本可正常运行完成。
内容的提问来源于stack exchange,提问作者Luis Leal
相关产品推荐
相关产品推荐

