conda的安裝與使用(2019-6-28更新)
2019-6-28 update: 增加刪除、重命名conda環境的操作
2019-6-17 update: 普大喜奔!清華恢復了conda的鏡像!清華🐮🍺!附上最新的添加清華鏡像的命令!
2019-6-12 update: 發現了一個新的anaconda repo叫genomedk,添加了hoptop的搭建本地conda鏡像的教程
2019-5-16 update: 有的小伙伴不知道怎么添加官方源,這邊補充一下
2019-5-7 update: 萬萬沒想到,騰訊的鏡像比清華的先掛了……
2019-4-29 update: 更新了新的查找軟件的recipe,更新了騰訊源來取代即將掛掉的清華源
有很多的生信軟件都可以通過conda安裝,省去了很多的安裝、修bug的煩惱。經常是安裝到崩潰的軟件,conda一行命令就搞定了。前兩天有個胖友問我gatk 3.8的版本在哪里下,下載好了之后怎么安裝,我果斷打開了https://bioconda.github.io/recipes ,告訴她安裝conda吧,只要一行命令
conda install gatk
就行了。(2019-4-29 update:這個網址已經掛掉了,請改用https://anaconda.org/bioconda/repo)
然后她很可愛的問我conda怎么裝。。果斷就把這篇教程丟給她了,但是發現現在的用法和以前的不是很一樣了,所以就把原來的教程更新了一下以饗讀者。

conda簡介
Conda 是一個開源的軟件包管理系統和環境管理系統,用於安裝多個版本的軟件包及其依賴關系,並在它們之間輕松切換。 Conda 是為 Python 程序創建的,適用於 Linux,OS X 和Windows,也可以打包和分發其他軟件。
安裝conda
conda分為anaconda和miniconda。anaconda是包含一些常用包的版本(這里的常用不代表你常用 微笑.jpg),miniconda則是精簡版,需要啥裝啥,所以推薦使用miniconda。
下載網址
conda官網:https://conda.io/miniconda.html
選擇適合自己的版本,用wget命令下載。
wget -c https://repo.continuum.io/miniconda/Miniconda3-latest-Linux-x86_64.sh
這里選擇的是latest-Linux
版本,所以下載的程序會隨着python的版本更新而更新(現在下載的版本默認的python版本已經是3.7了)
安裝命令:
chmod 777 Miniconda3-latest-Linux-x86_64.sh #給執行權限
bash Miniconda3-latest-Linux-x86_64.sh #運行
注意,以前的教程都是教一路yes下來的,但是會有隱患,特別是當你的服務器之前有安裝過軟件的話,conda會污染你原來的環境,把你原來設置好的東西進行更改。具體的慘痛教訓請參見:
Anaconda is a snake.
所以在詢問是否將conda加入環境變量的時候選擇no。

啟動conda
在上一步選擇no之后,輸入conda是會報找不到此命令的。那要如何啟動呢?
找到你剛才安裝的miniconda,如果沒有更改過安裝位置的話應該是在/home
下面,cd
到miniconda3的bin目錄下面,能看到有一個activate。

這里需要給activate
添加一下權限才能使用
chmod 777 activate
接下來啟動conda
. ./activate #這里的第一個點跟source是一樣的效果,我比較懶。

當命令行前面出現(base)
的時候說明現在已經在conda的環境中了。這時候輸入conda list
命令就有反應了

添加頻道
2019-5-16 update: 這個道理跟家里的電視機是一樣一樣的,安裝conda就相當於買了一台電視機,但是有電視了不意味着你就能看節目了,你要手動添加頻道才能看你想看的電視節目。
官方channel:
conda config --add channels bioconda conda config --add channels conda-forge
官方的話這兩個channel應該就夠了的。2019-6-12 update:最近在裝raxml-ng的時候發現了一個新的channel叫genomedk,各位也可以添加到condarc里去 👇
conda config --add channels genomedk
順便安利一個我hoptop學長的教程:如何搭建一個本地的conda鏡像(包含bioconda)供各位愛折騰的高端玩家。2019-6-17 update: 清華恢復了conda 的鏡像了!詳情請看下面:
Anaconda 鏡像即將恢復
借花獻佛給大家復習一遍如何添加清華的鏡像channels: 來源 → 生信媛: 喜大普奔: Anaconda的清華鏡像又可以用了
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/ conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main/ 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/bioconda/
2019-4-29 update: 由於anaconda授權問題,清華源即將關閉,請各位胖友添加以下騰訊源:
騰訊源已經掛掉了
conda config --add channels https://mirrors.cloud.tencent.com/anaconda/pkgs/free/ conda config --add channels https://mirrors.cloud.tencent.com/anaconda/cloud/bioconda/ conda config --add channels https://mirrors.cloud.tencent.com/anaconda/cloud/msys2/ conda config --add channels https://mirrors.cloud.tencent.com/anaconda/cloud/menpo/ conda config --add channels https://mirrors.cloud.tencent.com/anaconda/cloud/peterjc123/ conda config --add channels https://mirrors.cloud.tencent.com/anaconda/pkgs/main/ conda config --add channels https://mirrors.cloud.tencent.com/anaconda/cloud/conda-forge/ conda config --add channels https://mirrors.cloud.tencent.com/anaconda/cloud/pytorch/
萬萬沒想到,騰訊的鏡像比清華的先掛了……
感謝簡書用戶多啦A夢的時光機_648d
接下來啥鏡像能用我也不知道了……大家都試試吧,或者坐等新的鏡像發布。清華的近一個月應該是還能用的,我今天還測試過的。祝大家好運
顯示安裝的頻道
conda config --set show_channel_urls yes
查看已經添加的channels
conda config --get channels
已添加的channel在哪里查看
vim ~/.condarc
利用conda安裝生物信息軟件
安裝命令:
conda install gatk
搜索需要的安裝包:
提供一個網址,用於事先查找想安裝的軟件存不存在
conda available packages
當然, 也可以用這個命令進行搜索
conda search gatk
安裝完成后,可以用“which 軟件名”來查看該軟件安裝的位置:
which gatk
如需要安裝特定的版本:
conda install 軟件名=版本號
conda install gatk=3.7
這時conda會先卸載已安裝版本,然后重新安裝指定版本。
查看已安裝軟件:
conda list
更新指定軟件:
conda update gatk
卸載指定軟件:
conda remove gatk
退出conda環境
退出也很簡單,之前我們是. ./activate 或者 (. ~/miniconda3/bin/activate)
現在退出只要:
. ./deactivate
就退出當前的環境了
創建軟件的軟鏈接
跟着命令一路敲到這里的小旁友們估計發現了,現在退出conda環境之后之前安裝的軟件全都GG了,敲命令沒法執行了!
怎么辦呢!其實只要把安裝好的軟件軟連接到一個處在環境變量里的位置就可以使用了。三步走:
- 第一步,創建一個文件夾
我一般的習慣是在/home
目錄下創建一個.soft
文件夾 - 第二步,將這個文件夾添加到環境變量中
export PATH="~/.soft:$PATH"
- 第三步,軟鏈接
ln -s ~/miniconda3/bin/gatk ~/.soft
這樣就可以運行啦~如果還是不行建議試試初始化一下bashrc:. ./bashrc
創建conda環境
之前創建的時候顯示的是(base)這是conda的基本環境,有些軟件依賴的是python2的版本,當你還是使用你的base的時候你的base里的python會被自動降級,有可能會引發別的軟件的報錯,所以,可以給一些特別的軟件一些特別的關照,比如創建一個單獨的環境。
在conda環境下,輸入conda env list
(或者輸入conda info --envs
也是一樣滴)查看當前存在的環境:

目前只有一個base
conda create -n python2 python=2
#-n: 設置新的環境的名字
#python=2 指定新環境的python的版本
conda會創建一個新的python2的環境,並且會很溫馨的提示你只要輸入conda activate python2就可以啟動這個環境了

退出環境
如上面的截圖提到的,只要
conda deactivate
2019-6-28 update: 如何刪除和重命名一個已存在的環境
刪除環境
刪除也很容易的
conda remove -n myenv --all
就可以退出當前環境。
掌握了創建和刪除我們就可以實現重命名的操作了
重命名環境
實際上conda並沒有提供這樣的功能,但是可以曲線救國,原理是先克隆一個原來的環境,命名成想要的名字,再把原來的環境刪掉即可
參考自:conda 創建/刪除/重命名 環境
接下來演示把一個原來叫做py2的環境重新命名成python2:
conda create -n python2 --clone py2
conda remove -n py2 --all
騷操作:allias簡化啟動

linux提供了一個給大家偷懶的命令叫alias,只要在你的.bashrc
里設置一下就好了,我添加了一條叫做condaup
的命令,這樣就可以免去每次敲. ~/miniconda/bin/dactivate
的麻煩,一步搞定~技術宅改變世界!

參考及感謝
我以前的教程都不改環境變量
我的軟件通常是這樣安裝的:
## https://github.com/najoshi/sickle
cd ~/biosoft
mkdir sickle && cd sickle
wget https://codeload.github.com/najoshi/sickle/zip/master -O sickle.zip
unzip sickle.zip
cd sickle-master
make
~/biosoft/sickle/sickle-master/sickle -h
## Download and install sratoolkit
## http://www.ncbi.nlm.nih.gov/Traces/sra/sra.cgi?view=software
## http://www.ncbi.nlm.nih.gov/books/NBK158900/
mkdir -p ~/biosoft
cd ~/biosoft
mkdir sratoolkit && cd sratoolkit
wget https://ftp-trace.ncbi.nlm.nih.gov/sra/sdk/current/sratoolkit.current-centos_linux64.tar.gz
tar zxvf sratoolkit.current-centos_linux64.tar.gz
~/biosoft/sratoolkit/sratoolkit.2.8.2-1-centos_linux64/bin/fastdump -h
cd ~/biosoft
mkdir SnpEff && cd SnpEff
## http://snpeff.sourceforge.net/
## http://snpeff.sourceforge.net/SnpSift.html
## http://snpeff.sourceforge.net/SnpEff_manual.html
wget http://sourceforge.net/projects/snpeff/files/snpEff_latest_core.zip
## java -jar snpEff.jar download GRCh37.75
## java -Xmx4G -jar snpEff.jar -i vcf -o vcf GRCh37.75 example.vcf > example_snpeff.vcf
unzip snpEff_latest_core.zip
這樣我能完美的控制服務器里面的軟件,反正都是在 ~/biosoft
目錄
如果是常用軟件需要添加環境變量
或者某些庫文件需要添加到環境變量,我會:
mkdir -p ~/biosoft/myBin
echo 'export PATH=/home/jianmingzeng/biosoft/myBin/bin:$PATH' >>~/.bashrc
source ~/.bashrc
cd ~/biosoft
mkdir cmake && cd cmake
wget http://cmake.org/files/v3.3/cmake-3.3.2.tar.gz
tar xvfz cmake-3.3.2.tar.gz
cd cmake-3.3.2
./configure --prefix=/home/jianmingzeng/biosoft/myBin
make
make install
cd ~/biosoft
mkdir zlib && cd zlib
wget https://zlib.net/zlib-1.2.11.tar.gz
# Extracting files from the downloaded package:
tar -xvzf zlib-1.2.11.tar.gz
# Now, enter the directory where the package is extracted.
cd zlib-1.2.11
# Configuring zlib Library:
./configure --prefix=/home/jianmingzeng/biosoft/myBin
make
make install
這樣會比較方便寫教程
mkdir -p ~/biosoft/GATK/
cd ~/biosoft/GATK/
wget https://github.com/broadinstitute/gatk/releases/download/4.0.2.1/gatk-4.0.2.1.zip
unzip gatk-4.0.2.1.zip
~/biosoft/GATK/gatk-4.0.2.1/gatk --help
# for i in {1..22} X Y ;do echo "-I final_chr$i.vcf" '\';done
module load java/1.8.0_91
GATK=/home/jianmingzeng/biosoft/GATK/gatk-4.0.3.0/gatk
$GATK GatherVcfs \
-I final_chr1.vcf \
-O merge.vcf
而且讀者也很容易理解,我是在使用哪個軟件,是哪個版本。
但是最近為了圖省事用了conda
conda這個東西,非常多人給我推薦過,即使是像我這樣安裝過上千款生物信息學軟件的高手有時候也很痛苦各個軟件的依賴關系,如果有省事的,我也比較樂意遷移我的習慣,但是,悲劇來了。
它在安裝軟件的時候需要C庫就自己安裝,需要R包就自己按照R,需要perl就自己安裝,而且我把conda的默認路徑添加到環境變量最新,最高權限,就把我默認的perl,r全部替換了。
比如下面的軟件會報錯:
BEGIN failed--compilation aborted at /home/jianmingzeng/biosoft/starFusion/STAR-Fusion/STAR-Fusion line 12.
Can't locate Set/IntervalTree.pm in @INC (you may need to install the Set::IntervalTree module) (@INC contains: /home/jianmingzeng/biosoft/starFusion/STAR-Fusion/PerlLib /home/jianmingzeng/miniconda2/lib/site_perl/5.26.0/x86_64-linux-thread-multi /home/jianmingzeng/miniconda2/lib/site_perl/5.26.0 /home/jianmingzeng/miniconda2/lib/5.26.0/x86_64-linux-thread-multi /home/jianmingzeng/miniconda2/lib/5.26.0 .) at /home/jianmingzeng/biosoft/starFusion/STAR-Fusion/STAR-Fusion line 12.
瞬間就明白問題所在,conda的某些過程,把我的環境變量污染了,我以前配置好的perl就這樣被毀了,所以以前沒問題的流程現在就開始報錯了。
隨口在生信技能樹的VIP群里抱怨了一下,然后就有了今天這個教程!
conda請最好是通過source啟動,一定要用conda安裝不同功能的軟件各個env,免得它污染環境變量,使用某些軟件,就激活某些env。
leotao的建議
-
不要讓conda在安裝時,把path加到系統里去,要用的時候激活
-
激活后,用conda install -p /path/for/biotools/把 生信軟件裝到特定位置,而且這個位置的python版本最好和系統的一樣
-
把這個 /path/for/biotools/ 加入到系統path
-
可能這樣做后,反激活conda后生信軟件也能用,同時不會污染環境
另外附上一篇還未公布的筆記:
conda安裝的R語言初次使用會報錯
我個人是很反對使用conda來安裝R語言,但是很多時候conda安裝的軟件會依賴R,而conda比較實誠,一定要自己安裝自己的R,而不是使用系統環境的。
所以就很尷尬。
通常conda本身就在我們的環境變量里面,而且優先級很高。那么conda一旦選擇安裝了自己的R,就會替代我們的R。
就會沖突,報錯如下:
/home/jianmingzeng/miniconda2/lib/R/bin/exec/R: error while loading shared libraries: libicuuc.so.56: cannot open shared object file: No such file or directory
簡單搜索,發現的確沒有這個庫文件:
find ~/miniconda2/ -name *libicuuc.so*
/home/jianmingzeng/miniconda2/pkgs/icu-58.2-h9c2bf20_1/lib/libicuuc.so.58.2
/home/jianmingzeng/miniconda2/pkgs/icu-58.2-h9c2bf20_1/lib/libicuuc.so.58
/home/jianmingzeng/miniconda2/pkgs/icu-58.2-h9c2bf20_1/lib/libicuuc.so
/home/jianmingzeng/miniconda2/lib/libicuuc.so
/home/jianmingzeng/miniconda2/lib/libicuuc.so.58
/home/jianmingzeng/miniconda2/lib/libicuuc.so.58.2
實際上我在我的另外一個服務器上面同樣的查找,也是沒有這個文件,但是卻並不報錯。
/usr/local/bin/miniconda3/pkgs/icu-58.2-0/lib/libicuuc.so
/usr/local/bin/miniconda3/pkgs/icu-58.2-0/lib/libicuuc.so.58.2
/usr/local/bin/miniconda3/pkgs/icu-58.2-0/lib/libicuuc.so.58
/usr/local/bin/miniconda3/pkgs/icu-54.1-0/lib/libicuuc.so.54
/usr/local/bin/miniconda3/pkgs/icu-54.1-0/lib/libicuuc.so
/usr/local/bin/miniconda3/pkgs/icu-54.1-0/lib/libicuuc.so.54.1
/usr/local/bin/miniconda3/pkgs/icu-58.2-h9c2bf20_1/lib/libicuuc.so
/usr/local/bin/miniconda3/pkgs/icu-58.2-h9c2bf20_1/lib/libicuuc.so.58.2
/usr/local/bin/miniconda3/pkgs/icu-58.2-h9c2bf20_1/lib/libicuuc.so.58
/usr/local/bin/miniconda3/envs/py2.7/lib/libicuuc.so.54
/usr/local/bin/miniconda3/envs/py2.7/lib/libicuuc.so
/usr/local/bin/miniconda3/envs/py2.7/lib/libicuuc.so.54.1
/usr/local/bin/miniconda3/lib/libicuuc.so
/usr/local/bin/miniconda3/lib/libicuuc.so.58.2
/usr/local/bin/miniconda3/lib/libicuuc.so.58
可以看到這個庫文件是conda安裝了icu后獲得的,那么我應該是要安裝特定版本的icu才行。
conda install -c conda-forge icu=56.1
ICU(International Component for Unicode/Unicode國際化組件) 是 Unicode 支持、軟件國際化、全球化的一個成熟的、廣泛應用的庫,是一個由 IBM 贊助、支持和使用的,基於"IBM公共許可證",用於支持軟件國際化的開源項目。這個庫為 C 和 Java 編程語言提供了一整套操作 Unicode 數據的函數。這個庫是在一種無限制的開放源碼許可證下發布的,這使它可以在許多應用程序中使用。
問題是解決了,可是我首先不明白問題是如何產生的,其次也不明白,問題被解決的原理是什么。純粹是憑感覺,憑經驗。
之所以兩個系統表現不一樣,可能是linux版本不一致。
https://github.com/conda/conda/issues/3600