Conda 为什么越来越慢?
作者:生信宝典 | 生信宝典公众号
原文:https://mp.weixin.qq.com/s/OkOgN4j44MHNt1_noPVpzA
Conda 为什么越来越慢?
Conda 中包含的软件越来越多,而且软件的不同版本都保留了下来,软件的索引文件越来越大,安装一个新软件时搜索满足环境中所有软件依赖的软件的搜索空间也会越来越大,导致solving environment越来越慢。
Conda 是如何工作的?
- 从设定的通道(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"
}
}
解析repodata中的信息获取所有依赖的包的信息。
采用SAT-solver算法决定需要下载包的哪个版本和它们的安装顺序。
下载并安装包。
Conda 哪一步慢?
主要是第3步,确定待安装包的依赖包之间的兼容和已安装软件之间的兼容,获得需要下载的包和对应版本。
如何提速 Conda?
采用最新版的
conda(Conda-4.7相比 Conda-4.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 会能更快的解决依赖关系,避免 defaults 和 conda-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
综合以上组合,之前尝试多次都没安装好的工具,直接搞定。
下载提速
换个网或从朋友处拷贝已经下载好的压缩包一般在 anaconda_root_dir/pkgs 下,拷贝放在自己的 anaconda3/pkgs 下面,再次下载时系统会识别已经下载好的包而跳过(并不总是有效)。
- 获取所有相关包的名字,从朋友处拷贝下载好的安装包。如果拷贝过来未能自动识别,可手动安装
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 尚未测试,各位可以测试下提供下反馈。
参考资料
msarahan,《How We Made Conda Faster in 4.7》,Anaconda
bgruening, msarahan, etc.《Conda solver slowdown FAQ and recommendations》,GitHub Issue
Wolf Vollprecht, Johan Mabille, etc.《GitHub: TheSnakePit/mamba》,GitHub
Marius van Niekerk,《conda-metachannel》,Medium
Anaconda Team,《Understanding and Improving Conda's performance》,Anaconda
生信宝典,《Conda 软件安装 core dump error/Segment fault/段错误 怎么办?》,生信宝典公众号
生信宝典,《软件安装不上,可能是网速慢!Conda/R/pip/brew 等国内镜像大全拿走不谢》,生信宝典公众号
陈同,《用了 Docker,妈妈再也不担心我的软件安装了 - 基础篇》,生信宝典公众号
陈同,《Linux 学习 - 又双叒叕一个软件安装方法》,生信宝典公众号
Jim Crist,《conda-pack: A tool for packaging and distributing conda environments》,Conda-Pack
封面来源于 Free Image on Pixabay - Motivational Quote, Try And Stop Me.
猜您喜欢 往期精选▼
2. 拒绝conda, 用virtualenv构建多版本的python开发环境
4. 使用 conda 和 Jupyter 在 R 中实现数据科学分析
5. 使用 conda 和 Jupyter 创建你的自定义 R 包,转换笔记为幻灯片

本文分享自微信公众号 - 生信科技爱好者(bioitee)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。
Conda 为什么越来越慢?的更多相关文章
- 用conda管理Python包
用conda管理Python包 conda是一个很好的包管理工具,在用了Anaconda之后一直不知道怎么用conda进行管理,其实很简单,就是没人教,慢慢自己摸索了一点.直接在Anaconda的命令 ...
- conda管理包
清理 conda clean --lock --tarball --package (安装包) 安装或更新包 conda install numpy=1.9.3 conda update numpy= ...
- (数据科学学习手札94)QGIS+Conda+jupyter玩转Python GIS
本文完整代码及数据已上传至我的Github仓库https://github.com/CNFeffery/DataScienceStudyNotes 1 简介 QGIS随着近些年的发展,得益于其开源免费 ...
- 来,一起让我们越来越懒,面向CSS、JS未来编程。(9.28已更新)
2016.10.29更新 本文存在大量的错误,仅供参考. 不知不觉在前端领域马上一个年头就要过去了,然而再看看自己的代码,果然够烂,那么为什么代码一直没有用面向对象的思维去写CSS呢?首先有两点:一点 ...
- 怎样用conda安装opencv
首先用Anaconda是因为方便(管理方便,包安装真心不方便).下面是我的安装过程: 首先使用如下命令安装opencv conda install -c https://conda.binstar.o ...
- conda安装包
前面讲了有关conda改变镜像提高安装速度,这里来解决很多实用C写的酷,在Windows下不好安装的解决方案 1. 寻找wheel预编译文件 没有的话 2.使用conda命令安装 没有该包的话 3.实 ...
- 更改conda安装源镜像
为了更好安装包需要制定conda安装包所使用的镜像为中国的镜像,目前为止只有一家提供了镜像 执行conda命令: conda config 会创建conda的配置文件,使用search everyth ...
- vs2010/2013项目的C++所在文件夹越来越大如何解决?
vs2010/2013项目所在文件夹越来越大如何解决? Tools->Options->Text Editor->C/C++->Advanced,在 Fallback Loca ...
- ubuntu和windows上pip和windows上conda国内源更新module
ubuntu上: -i http://pypi.douban.com/simple --trusted-host pypi.douban.com # pip install web.py -i htt ...
- How to fix the conflict between ROS Python and Conda
Problem: Ever since I have installed Conda, ROS does not seem to work. And predictably it is because ...
随机推荐
- Spark基础实验七
今天在做实验七,最开始有许许多多多的错误,最后通过查找.问同学才知道是数据集的格式和存放位置的原因. 就在好不容易解决了上一个错误,下一个错误就立马而来,错误如下: 目前还未找到解决办法,spark实 ...
- NotionAI - 文档领域的ChatGPT,一款 AI 加持的在线文档编辑和管理工具
简介 NotionAI - 文档领域的ChatGPT,一款 AI 加持的在线文档编辑和管理工具 作为国际领先的在线文档编辑和管理工具,Notion受到了广大用户的欢迎,尤其是程序员们.它不仅支持笔记. ...
- 支付回调MQ消息的幂等处理及MD5字符串es中的使用及支付宝预授权完成
支付回调MQ消息的幂等处理及MD5字符串es中的使用及支付宝预授权完成 1.幂等的处理,根据对象的转json 转md5作为key,退款的处理 控制发送端?业务上比较难控制.支付异步通知,退款有同步通知 ...
- style中加了scoped无法更改element ui样式解决办法
第一种方法 原因:scoped 解决方法:去掉scoped 注意:此时该样式会污染全局样式,可以把它放在公共的css里面 为了不让所有的 el-input标签都是该样式,可以在HTML给改input加 ...
- Defi开发简介
Defi开发简介 介绍 Defi是去中心化金融的缩写, 是一项旨在利用区块链技术和智能合约创建更加开放,可访问和透明的金融体系的运动. 这与传统金融形成鲜明对比,传统金融通常由少数大型银行和金融机构控 ...
- Github美化日记 - 又菜又爱玩
Github美化日记 - 又菜又爱玩 一.咱就说 无论是技术大牛, 或者是技术小菜, 都希望有一个好看的Github首页吧!(快说你想要! ![iShot_2023-04-05_18.58.32.mi ...
- python内在模块之winreg --- Windows 注册表访问
winreg --- Windows 注册表访问¶ 这些函数将 Windows 注册表 API 暴露给 Python.为了确保即便程序员忽略了显式关闭句柄,该句柄依然能够正确关闭,它使用了一个 han ...
- [Linux]Linux执行sh脚本时,出现$‘\r‘: command not found(未找到命令)"错误的解决方案[转载]
1 文由 为什么要把这么一个看似很简单的问题,还要以[转载]的方式专门用博客写出来? 主要是在编写crontab的自动化定时脚本的过程中,发现是这个错导致的自动化脚本频繁执行异常时,已经花了好几个小时 ...
- [Java]排序算法>选择排序>【简单选择排序】(O(n*n)/不稳定/)
1 选择排序 1.1 算法思想 每一趟从待排序的记录中选出关键字最小的记录,按顺序放在已排序的记录序列的最后(or最前面),直到全部排完位置. 1.2 算法特征 属于[选择排序] 简单选择排序 堆排序 ...
- Semantic Kernel 入门系列:🔥Kernel 内核和🧂Skills 技能
理解了LLM的作用之后,如何才能构造出与LLM相结合的应用程序呢? 首先我们需要把LLM AI的能力和原生代码的能力区分开来,在Semantic Kernel(以下简称SK),LLM的能力称为 sem ...