在Linux里面有一个巨大的梦魇就是软件包之间的依赖关系, 安装软件的时候各种依赖库找不到, 很让人抓狂.好消息是不同的Linux发行版提提供各自的依赖管理系统, apt/yum是目前比较常见的管理工具. 如果你有管理员权限, 你能够非常开心地使用他们降低你的压力,但是有些时候你使用的服务器集群不允许你直接使用apt/yum进行更新,或者说你干脆就没有管理员权限,你就要非常蛋疼的手动安装每个软件的前置依赖.
好消息是anaconda推出了conda, 这是一款非常强大的非管理员下的软件管理工具. conda有一个官方的channel, 还有许多的第三方channel增加了conda能够安装的软件.但是事情并没有那么美好,今天我偶然间看到一篇文章 Notes on Anaconda,里面就说到了conda的channel的顺序会造成许多软件出现动态依赖库找不到的噩梦. 因此作者说了下面这一句
I’ve learned more since writing these notes. Now, I cannot recommend scientists use conda, at least to manage Python, R, and R package installations.
并且举了一个例子,如果你有一个X包来自于conda-forge
,一个Y包来自于biconda
才能让Z包顺利工作.但是在YML里面不知道X,Y那个包是来自于conda-forge
,那个是来自于bioconda
. 比如说conda-forge
有一个bzip2-1.0.6
,里面有对应的动态.so
文件,而defaults
也有bzip2-1.0.6
,但是没有.so
文件. 但是根据按照顺序,conda先从default
里面找到了bzip2-1.0.6
, 结果你就会在运行软件的时候找不到依赖文件.
对于以上这些问题,我的建议有以下几个
- 在写YML的时候主要把你的channel写上去, 并且一定要把
default
放到最后. - 对于Python和R开发的工具,请尽量创建的新的环境进行管理.
如下是原文地址: http://vincebuffalo.org/notes/2017/08/28/notes-on-anaconda.html
下面是一个YML文件例子(conda env export > environment.yml https://conda.io/docs/user-guide/tasks/manage-environments.html#create-env-file-manually):
# version1.0 # email: xxx@126.com channels: - https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge - https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/bioconda - bioconda - defaults dependencies: # Workflow - luigi # Fastq Download And Quality Control Methods - sra-tools - fastx_toolkit - fastqc - trimmomatic - multiqc # Short Reads Alignment Methods - bwa - bowtie - bowtie2 - hisat2 - star # short sequence Alignment Methods - blast # Long Sequence Alignment Methods - mummer - pymummer - gmap - blat - lastz # SAM/BAM/BED Processing tools - samtools - bedtools # SNP Calling Methods - bcftools - freebayes - gatk4 # VCF Processing Tools - snpeff # Alignment-Based Gene/Exon/Transcript Estimation Methods - htseq # Alignment-Free Transcript Estimation Methods - salmon - kallisto
自己打安装包(建.yaml文件),见:
https://conda.io/docs/user-guide/tutorials/build-pkgs.html
尊重他人劳动成果,转载请注明出处:Bluesky's blog » conda使用注意事项