世上没有白走的路,每一步都算数
经验这种东西,不像武侠小说里的内力那样,随随便便就能获取别人几十年的修为, 往往是你过了多年以后才会顿悟,原来这个道理那么重要,我当时怎么没有想到呢。
避免这种尴尬的方法就是用你的逻辑去判断,然后践行那些你推理之后正确的经验。
直到现在,我才读懂了下面这段话。
Package, dependency and environment management for any language: Python, R, Scala, Java, Javascript, C/ C++, FORTRAN
Package, dependency and environment management for any language: Python, R, Scala, Java, Javascript, C/ C++, FORTRAN
Package, dependency and environment management for any language: Python, R, Scala, Java, Javascript, C/ C++, FORTRAN
更加不可思议的是,这句话其实在(conda)[https://conda.io/docs/] 首页的第一句,可见有些东西,你是“看不见的“。
日常工作的窘境
我们研究所里有一台服务器,很久之前在Linux基础不太好的时候,我想安装软件时候因为缺少依赖而无法编译,甚至有时候是g++编译器的版本不够。如果你的技术足够好,你可以用旧的编译器编译新的版本,然后安装好其他以来环境,但对于大部人而已,这件事情是可以交给管理员做的。但是,问题在于我们的服务器的管理员已经离职,目前的管理者就是给你加加存储空间而已。
初见conda
我是在anaconda的介绍下认识conda的。当时为了学习Python爬虫,课程老师建议Windows平台安装anaconda,保证环境一致,省去许多软件的安全感。后来接触到虚拟工作环境,发现conda还能创建许多独立的Python环境。那时年少,就只会用conda install
装装软件而已。
又见conda
后来学习生物信息学,也就是去年的事情,在安装生信软件折腾中被bioconda
解救。当时发现,只要在conda中添加如下channel,就能非常便捷的安装生物信息软件了。之前还专门写了一篇文章介绍:
(conda config --add channels r)
conda config --add channels defaults
conda config --add channels conda-forge
conda config --add channels bioconda
缺陷就在于Windows的conda即便添加了这些channel也是无法安装软件的。不过好在我的目的是服务器,所以无关紧要。
不过bioncda的镜像在国外,速度太慢了,也是我当初认为的“缺陷”。
如何正确的使用bioconda
今天,我用服务器编译一个软件的时候,发现./configure
出现gcc版本过低不能通过,本来想着要自己去编译一个gcc,但是又想到,似乎我用bioconda安装软件的时候,它会自动安装java, c++等依赖环境,进一步的想到,我能不能用conda环境的gcc进行编译呢?结果验证了我的想法,真的可行!
于是乎,我想到了Linux的本质就是Linus写的一个内核,然后gnu团队为了提供了无数开源软件。后来为了方便软件安装,处理错综复杂的依赖关系,就有了RPM和DPKG两大主流的软件管理器,对应yum和apt。
conda本质上也是一种软件管理器,所以分为依赖环境和在此之上运行的软件。想通这一点,就知道如何加速bioconda的下载速度了。生信软件本身不大,但是依赖的软件包倒是挺多的,只要保证依赖的软件包的下载速度够快,那么总体速度就上去了,而这些在清华源已经有了。
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/
conda config --set show_channel_urls yes
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/msys2/
因此,上帝的归上帝,凯撒的归凯撒。
多么感人的速度呀,为什么之前没有明白这个简单的道理呢?再也不需要去考虑Linuxbrew了
但是要明白这个简单的道理,却至少得了解什么是Linux,知道什么叫做软件管理器,还得折腾过conda。可见世上没有白走的路,每一步都算数。