为何conda安装自研SMEAGOL包需额外指定依赖通道?
出现这种安装差异的核心原因是你的smeagol-bio包依赖的大部分运行时组件仅存在于conda-forge或bioconda通道中,仅指定gsl_tools通道时,Conda无法完成依赖解析,具体拆解如下:
依赖包的通道分布限制
查看你的meta.yaml中requirements/run字段定义的依赖项:run: - biopython>=1.79 - h5py>=3.1.0 - keras>=2.4.3 - numpy>=1.19.2 - pandas>=1.2.5 # ... 其他依赖 - tensorflow>=2.5.0 - deeplift>=0.6.13.0其中
biopython、deeplift、tensorflow等核心依赖仅在bioconda或conda-forge通道提供官方维护的适配版本,你的gsl_tools通道只包含你上传的smeagol-bio包本身,没有这些依赖包。当仅指定gsl_tools通道时,Conda求解器无法找到满足版本要求的依赖包,会持续尝试组合无效的版本,最终导致求解卡住或失败。channels字段的作用范围误解
你在meta.yaml中定义的channels字段:channels: - conda-forge - bioconda这个配置仅在构建包时生效,用于告诉
conda build从哪些通道获取构建过程中需要的依赖(比如host阶段的工具),并不会自动告知用户的Conda客户端在安装时去这些通道查找依赖。因此用户安装时必须手动指定这些通道,否则Conda只会搜索你指定的gsl_tools通道。跨平台依赖的适配缺失
你的包是noarch: python,本身跨平台兼容,但依赖的部分包(如tensorflow)在不同架构(MacOS M1、Intel、Linux)上的可用版本差异很大,只有conda-forge和bioconda提供了全平台的适配版本。仅使用gsl_tools通道时,Conda无法获取对应平台的依赖版本,进一步导致求解失败。
优化建议
- 在包的安装说明(Anaconda.org页面、项目文档)中明确告知用户需要添加
conda-forge和bioconda通道,推荐安装命令:conda install -c conda-forge -c bioconda -c gsl_tools smeagol-bio - 可以在
meta.yaml的about/notes字段中添加安装提示,帮助用户了解通道要求。
内容的提问来源于stack exchange,提问作者Beat Ehrmann

