一招解决Conda安装卡在solving environment这一步!

生物信息学习的正确姿势

NGS系列文章包括NGS基础、转录组分析 (Nature重磅综述|关于RNA-seq你想知道的全在这)、ChIP-seq分析 (ChIP-seq基本分析流程)、单细胞测序分析 (重磅综述:三万字长文读懂单细胞RNA测序分析的最佳实践教程 (原理、代码和评述))、DNA甲基化分析、重测序分析、GEO数据挖掘(典型医学设计实验GEO数据分析 (step-by-step) - Limma差异分析、火山图、功能富集)等内容。

一文掌握Conda软件安装:虚拟环境、软件通道、加速solving、跨服务器迁移

这个为生信学习打造的开源Linux/Bash教程真香!!!

Conda为什么越来越慢?

Conda中包含的软件越来越多,而且软件的不同版本都保留了下来,软件的索引文件越来越大,安装一个新软件时搜索满足环境中所有软件依赖的软件的搜索空间也会越来越大,导致solving environment越来越慢。

Conda是如何工作的

  1. 从设定的通道 (channel)处下载通道中所有软件的索引信息 (repodata.json) (Collecting package metadata (repodata.json))

    "packages" : {
     "moto-1.3.7-py_0.tar.bz2" : {
       "build" : "py_0",
       "build_number" : 0,
       "depends" : [ "aws-xray-sdk !=0.96,>=0.93", "backports.tempfile", "boto >=2.36.0", "boto3 >=1.6.15", "botocore >=1.12.13", "cookies", "dicttoxml", "docker-py", "flask", "jinja2 >=2.7.3", "jsondiff 1.1.1.*", "mock", "pyaml", "python", "python-dateutil", "python-jose <3.0.0", "pytz", "requests >=2.5", "responses >=0.9.0", "six", "werkzeug", "xmltodict" ],
       "license" : "Apache-2.0",
       "md5" : "17b424658cd07e678b5feebdc932eb52",
       "name" : "moto",
       "sha256" : "5924666f8c1758472dc4c3d22b270b46cd1c4b66c50a9ba50d5c636d2237bdd1",
       "size" : 399973,
       "subdir" : "noarch",
       "timestamp" : 1552438392680,
       "version" : "1.3.7"
     }
    }
  2. 解析repodata中的信息获取所有依赖的包的信息

  3. 采用SAT-solver算法决定需要下载包的哪个版本和它们的安装顺序

  4. 下载并安装包

Conda哪一步慢?

主要是第3步,确定待安装包的依赖包之间的兼容和已安装软件之间的兼容,获得需要下载的包和对应版本。

如何提速Conda

  • 采用最新版的conda (Conda4.7相比Conda4.6提速3.5倍, Conda 4.8应该不会比4.7慢)

  • 安装时指定版本减少搜索空间 conda install python=3.7.4

  • 安装R包时指定R的版本也会极大减小搜索空间 (R包因其数目众多,也是生物类软件依赖解析较慢的原因之一) conda install r-base=4.0.2 r-ggplot2=3.3.2

  • 采用mamba加速软件依赖解析 [mamba采用c++重写了部分解析过程,这个提速效果是很明显的] (安装好mamba后就可以用mamba替换conda进行安装了)

    conda install mamba -c conda-forge
    mamba install python=3.7.4
  • ,默认conda解析软件依赖时优先考虑允许的最高版本,设置通道优先级权限高于软件版本新旧后,conda会能更快的解决依赖关系,避免defaultsconda-forge通道的奇怪组合导致软件依赖解析迟迟不能将结束的问题: conda config --set channel_priority strict (这个命令只需要运行一次)。

  • 创建一个新环境 (conda env create -n env_name)再安装软件,这样就不用考虑与已有的软件的兼容问题了,也可以大大降低搜索空间和提高解析软件依赖的速度。

  • 如果安装的软件提供了environment.yaml那么用起来,文件中对应的软件版本都很明确,解析依赖关系时更快。(具体导出方式见Bioconda软件安装神器:多版本并存、环境复制、环境导出)

    channels:
     - qiime2/label/r2020.6
     - conda-forge
     - bioconda
     - defaults
    dependencies:
     - _libgcc_mutex=0.1
     - _openmp_mutex=4.5
     - _r-mutex=1.0.1
     - alsa-lib=1.1.5
     - arb-bio-tools=6.0.6
     - attrs=19.3.0
     - backcall=0.2.0
     - bibtexparser=1.1.0
     - binutils_impl_linux-64=2.34
     - binutils_linux-64=2.34
     - bioconductor-biobase=2.42.0
     - bioconductor-biocgenerics=0.28.0
     - bioconductor-biocparallel=1.16.6
     - bioconductor-biostrings=2.50.2
     - bioconductor-dada2=1.10.0
  • 添加Bioconda通道时,注意顺序,给予conda-forge最高优先级,其次是bioconda。如果之前已经添加好了通道,自己在~/.condarc中调整顺序。

    conda config --add channels defaults
    conda config --add channels bioconda
    conda config --add channels conda-forge
  • 综合以上组合,之前尝试多次都没安装好的工具,直接搞定。

下载提速

  1. 国内镜像,见软件安装不上,可能是网速慢!Conda/R/pip/brew等国内镜像大全拿走不谢~~

  2. 换个网或从朋友处拷贝已经下载好的压缩包一般在anaconda_root_dir/pkgs下,拷贝放在自己的anaconda3/pkgs下面,再次下载时系统会识别已经下载好的包而跳过 (并不总是有效)。

  3. 获取所有相关包的名字,从朋友处拷贝下载好的安装包。

    如果拷贝过来未能自动识别,可手动安装 conda install --offline local_path

mamba install r-base=4.0.2 r-ggplot2=3.3.2 --dry-run >package_solving_result


# _anaconda_depends  pkgs/main/linux-64::_anaconda_depends-2020.07-py37_0
# _r-mutex           conda-forge/noarch::_r-mutex-1.0.1-anacondar_1
# binutils_impl_lin~ pkgs/main/linux-64::binutils_impl_linux-64-2.33.1-he6710b0_7
# binutils_linux-64  conda-forge/linux-64::binutils_linux-64-2.33.1-h9595d00_17
# brotlipy           conda-forge/linux-64::brotlipy-0.7.0-py37h516909a_1000
# bwidget            conda-forge/linux-64::bwidget-1.9.14-0
# gcc_impl_linux-64  pkgs/main/linux-64::gcc_impl_linux-64-7.3.0-habb00fd_1
# gcc_linux-64       conda-forge/linux-64::gcc_linux-64-7.3.0-h553295d_17

# 获取所有包的名字
grep '::' a | sed 's/.*:://' | sed 's/$/.tar.bz2/'

# 手动安装
for i in `grep '::' a | sed 's/.*:://' | sed 's/$/.tar.bz2/'`; do conda install --offline /anaconda3/pkgs/$i; done

使用conda-pack直接从已经安装好的地方拷贝一份

安装conda-pack

conda install -c conda-forge conda-pack
# pip install git+https://github.com/conda/conda-pack.git

打包已经安装好的环境

conda pack -n my_env_name -o my_env_name.tar.gz

拷贝打包好的环境my_env_name.tar.gz到目标机器,并解压到任何目录,一般推荐放到envs目录下 (anaconda_root/envs)。(注意:anaconda_root改为自己的conda安装路径。)

# 解压打包好的环境
# 默认是全都解压到当前目录,场面很壮观
# -C 一定要指定
mkdir -p anaconda_root/envs/my_env
tar -xzf my_env.tar.gz -C anaconda_root/envs/my_env

# 激活环境
source my_env/bin/activate

# Unpack
conda-unpack

# 至此环境就完全拷贝过来了

# 去激活
source deactivate

目前在同样的操作系统 (Centos)测试可以通过,不同操作系统如centos-ubuntu尚未测试,各位可以测试下提供下反馈。

References

  1. https://www.anaconda.com/blog/how-we-made-conda-faster-4-7

  2. https://github.com/bioconda/bioconda-recipes/issues/13774

  3. https://github.com/TheSnakePit/mamba

  4. https://medium.com/@marius.v.niekerk/conda-metachannel-f962241c9437

  5. https://www.anaconda.com/blog/understanding-and-improving-condas-performance

  6. Conda软件安装 core dump error/Segment fault/段错误 怎么办?

  7. 软件安装不上,可能是网速慢!Conda/R/pip/brew等国内镜像大全拿走不谢~~

  8. 用了Docker,妈妈再也不担心我的软件安装了 - 基础篇

  9. Linux学习 - 又双叒叕一个软件安装方法

  10. https://conda.github.io/conda-pack/

  11. 封面来源于:https://pixabay.com/photos/motivational-quote-try-and-stop-me-3403638/

往期精品(点击图片直达文字对应教程)

后台回复“生信宝典福利第一波”或点击阅读原文获取教程合集

  • 93
    点赞
  • 390
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 11
    评论
### 回答1: 当使用conda安装软件包时,有时会在“solving environment”这一步骤。这可能是因为conda正在尝试解决软件包之间的依赖关系,以确保它们能够正确地安装和运行。这可能需要一些时间,特别是当您安装的软件包数量较多时。您可以耐心等待一段时间,让conda完成这个过程。如果等待时间过长,您可以尝试更新conda或使用其他方式安装软件包。 ### 回答2: conda常常在solving environment这个步骤住,这个问题通常出现在安装某些软件包时。这个问题产生的原因有很多,可能是软件包的依赖关系不良好,也可能是网络问题或者是conda配置问题。以下是解决condasolving environment的几种方法: 1. 更新conda:升级conda可以解决某些软件包无法安装的问题,方法是在命令行中运行conda update conda。 2. 删掉conda存储库:将conda存储库中的软件包删除,重新安装新的版本,这样可以解决依赖关系不良好的问题。 3. 清除conda缓存:运行conda clean --all可以清除掉conda缓存,可能会解决condasolving environment的问题。 4. 改变conda的搜索顺序:有些时候conda不能够正确地找到所需的软件包,这是因为默认情况下conda搜索顺序可能不正确。您可以使用conda config --set restore_free_channel true更改搜索顺序,可以让conda首先在免费的通道中搜索软件包。 5. 修改conda配置文件。通过修改~/.condarc和conda config --show命令,可以确保conda正确地连接到正确的通道,并且conda的搜索顺序是正确的。 总之,condasolving environment通常是由于软件包的依赖关系,网络或配置问题导致的,上述方法可以帮助我们解决这个问题。 ### 回答3: Conda是一个开源的包管理系统和环境管理系统。在使用conda时,有时会出现solving environment的情况,这个问题可能是由于以下几个原因: 1.网络问题:当conda尝试从远程服务器下载包时,网络可能会出现问题导致solving environment解决方法:可以尝试更换网络环境或者等待一段时间后再试。 2.包依赖关系问题:当conda尝试解决依赖关系时,可能会出现潜在的问题导致solving environment解决方法:可以尝试使用conda clean --all命令清理缓存,或者使用conda info命令查看当前环境的包列表并手动卸载一些冲突的包。 3.环境冲突:当环境中已经存在某些包时,conda尝试解决依赖关系会失败导致solving environment解决方法:可以尝试创建一个新的虚拟环境,并重新安装需要的包。 总体来说,solving environment的问题可能是由于多种原因导致的。可以通过以上的解决方法来尝试解决问题。如果问题仍然存在,可以考虑在conda的GitHub页面上提出问题并获取帮助。
评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

生信宝典

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值