可重複的生信分析系列二:Conda的介紹

  • 2020 年 3 月 30 日
  • 筆記

可重複的生信分析一直是未來的趨勢。如果實現可重複的生信分析,關鍵在於分析軟件版本的控制,一致的環境設置還有良好的分析流程的記錄。Conda可以說是版本控制和生信工具安裝的一大神器。相信大家對它了解肯定不少,但是又該怎麼樣利用它,進行可重複的分析呢?今天繼續講第二部分 Conda的介紹

本節教程將會使用到docker,去安裝minconda的鏡像。如果你還沒看我docker的教程,強烈建議你先回顧一下:

可重複的生信分析系列一:Docker的介紹

什麼是Conda?

基本介紹與其特點

從Conda的官方文件中找到了下面這一段解析:

Conda是在Windows,macOS和Linux上運行的開源軟件管理系統和環境管理系統。Conda可以快速安裝,運行和更新軟件包及其依賴的環境與工具。Conda可以輕鬆地在本地計算機上的環境中創建,保存,加載和切換。它是為Python程序創建的,但可以適用於任何語言的軟件。

如果你在安裝生物信息學工具之前遇到過依賴性問題,Conda會輕而易舉幫助您解決這一問題。此外,Conda使安裝和使用不兼容的工具變更加容易。因為它可以創建不同的虛擬環境,使得不兼容的工具在相對獨立的環境中運行,兩者之間不衝突和打架。

關於幾個conda

什麼是Anaconda?

Anaconda是Conda的發行的一個安裝包。它是一個數據科學平台,其中包含許多軟件包(有點太多了個人認為)。

什麼是Miniconda?

就如其名,Miniconda是Conda的最小安裝程序。可以看作是小型版本的Anaconda,僅包含Conda,Python,它們依賴的軟件包以及少量其他有用的軟件包,包括pip,zlib和其他一些軟件包。對於生信分析而言,個人更喜歡使用Miniconda並僅安裝所需的工具。

什麼是Bioconda?

Bioconda是conda生物信息學軟件的託管平台。Conda通道只是存儲軟件包的位置。但Bioconda管道上提供了使用最廣泛的生物信息工具,該工具託管了超過6,000多種生物信息包。

使用docker安裝,使用conda

將上節課所學的知識運用,使用docker來安裝conda:

  1. docker pull continuumio/miniconda3

使用docker,運行新的conda container:

  1. # run new container
  2. docker run -it --rm continuumio/miniconda bash

運行上面的命令後,可以看到類似於這樣的terminal:

  1. (base) root@c94ca01d4fdb:/#

像其它工具一樣,直接輸入conda並且不帶任何參數,就可以得到其幫助文檔:

  1. conda
  2. usage: conda [-h] [-V] command ...
  3. conda is a tool for managing and deploying applications, environments and packages.
  4. Options:
  5. positional arguments:
  6. command
  7. clean Remove unused packages and caches.
  8. config Modify configuration values in .condarc. This is modeled
  9. after the git config command. Writes to the user .condarc
  10. file (/root/.condarc) by default.
  11. create Create a new conda environment from a list of specified
  12. packages.
  13. help Displays a list of available conda commands and their help
  14. strings.
  15. info Display information about current conda install.
  16. init Initialize conda for shell interaction. [Experimental]
  17. install Installs a list of packages into a specified conda
  18. environment.
  19. list List linked packages in a conda environment.
  20. package Low-level conda package utility. (EXPERIMENTAL)
  21. remove Remove a list of packages from a specified conda environment.
  22. uninstall Alias for conda remove.
  23. run Run an executable in a conda environment. [Experimental]
  24. search Search for packages and display associated information. The
  25. input is a MatchSpec, a query language for conda packages.
  26. See examples below.
  27. update Updates conda packages to the latest compatible version.
  28. upgrade Alias for conda update.
  29. optional arguments:
  30. -h, --help Show this help message and exit.
  31. -V, --version Show the conda version number and exit.
  32. conda commands available from other packages:
  33. env

conda的版本

在安裝工具前,先確保我們使用的conda版本是最新的:

  1. ### 查看當前版本
  2. conda --version
  3. conda 4.8.2
  4. ###進行升級,會彈出需要你輸入y的確認信息
  5. conda update conda
  6. ###再次查看更新後的版本
  7. conda --version
  8. conda 4.8.3
  9. ###另外,你還可以將所有conda的包更新為最新兼容的版本(可選的)
  10. conda update --all

對於conda下載的緩存臨時文件,可以定期通過 conda clean進行清理:

  1. conda clean -a

使用conda安裝生物信息軟件bcftools

在沒有conda之前,我們需要 通過一系列的操作,才能完成安裝:

相比之下,使用Bioconda的管道進行安裝就容易得多了:

  1. ### 使用Bioconda的管道進行安裝
  2. conda install -c bioconda bcftools
  3. ###下載測試文件
  4. cd /tmp
  5. wget https://github.com/davetang/learning_vcf_file/raw/master/aln_consensus.bcf
  6. # 查看前面兩個的SNP信息
  7. bcftools view -v snps aln_consensus.bcf | grep -v "^#" | head -2
  8. 1000000 336 . A G 221.999 . DP=112;VDB=0.756462;SGB=-0.693147;MQ0F=0;AF1=1;AC1=2;DP4=0,0,102,0;MQ=60;FQ=-281.989 GT:PL 1/1:255,255,0
  9. 1000000 378 . T C 221.999 . DP=101;VDB=0.704379;SGB=-0.693147;MQ0F=0;AF1=1;AC1=2;DP4=0,0,99,0;MQ=60;FQ=-281.989 GT:PL 1/1:255,255,0

Conda的環境管理

相信大部分的小夥伴對上面提到的分析都應該了如指掌了,但是conda在可重複的生信分析中,究竟能起到一個什麼的作用,下面請聽我細說:

什麼是Conda的環境? 其環境有什麼用?

使用Conda,你可以為某個項目或者某個分析創建一個獨特隔離的環境。換個意思,所謂的環境就是一組可在一個或多個項目中使用的軟件包。Miniconda的默認環境是base環境。

我強烈不建議在同一環境中安裝所有軟件包/工具。這個是很多新手玩家會犯的錯誤。很多剛剛入門生信的初學者,都會一個勁的在base的環境里,安裝各種各樣他們所需的工具。因為貪圖簡便,一個 conda install就覺得自己可以走天下了。但是隨着軟件越裝越多,因為不同的軟件所需的依賴包不同,就會造成當你安裝某個軟件後,你之前安裝的一些軟件就無法運行了。舉個例子,比如有些軟件是依賴python3的,但是有一些是依賴python2,當你安裝新的軟件時,conda會自動幫你把當前的環境轉換成你該工具所依賴的環境。這樣一來,就相當於拆東牆補西牆,很多軟件都互相打架了,然後實在沒辦法了,嗯,就把conda刪了,重新把所有軟件安裝一遍。不要問我為什麼那麼清楚,因為我也踩過坑。

目前有兩種創建conda環境的方法:

  1. 通過環境文件YAML來創建( environment.yml)
  2. 通過命令來手動指定需要安裝的軟件包

通過環境文件來創建conda環境

首先看看一個 environment.yml文件的例子:

  1. name: bwa_old
  2. channels:
  3. - bioconda
  4. dependencies:
  5. - bwa=0.7.15

該文件主要由三部分組成:

  • 該環境的名字 name:
  • 你所指定的channel去安裝工具 channels
  • 所需安裝的軟件包

現在我們開始構建我們的環境:

  1. #下載好預先準備好的環境文件
  2. wget https://raw.githubusercontent.com/davetang/reproducible_bioinformatics/master/environment.yml
  3. #通過environment.yml文件構建環境
  4. conda env create --file environment.yml
  5. # 檢查當前conda所有的環境
  6. conda env list
  7. ##可以看到當前的環境有兩個
  8. # conda environments:
  9. #
  10. base * /opt/conda
  11. bwa_old /opt/conda/envs/bwa_old

安裝好環境後,要怎麼使用呢?首先需要激活已經安裝好的環境:

  1. conda activate bwa_old
  2. # 你的terminal就會變成提示你你已經切換成(bwa_old)這個環境了
  3. # (bwa_old) root@d470a3e9da91:/tmp#
  4. ### 查看一下bwa,看看是不是確實安裝好了
  5. bwa
  6. Program: bwa (alignment via Burrows-Wheeler transformation)
  7. Version: 0.7.15-r1140
  8. Contact: Heng Li <[email protected]>

如果你運行完bwa後,想切回到之前的原始環境可以使用 conda deactivate:

  1. conda deactivate
  2. # 回到之前的base了
  3. # (base) root@d470a3e9da91:/tmp#

通過命令來手動指定需要安裝的軟件包

除了通過指定的環境文件來構建conda的環境之外,我們還可以通過手動指定需要安裝的軟件包來構建我們所需的環境。

下面看一個例子:

  1. conda create -c conda-forge -n test_env python=2.7 numpy matplotlib pandas

這裡我就手動告訴conda,通過 -c說明安裝的channel是conda-forge,通過 -n告訴它我所創建的環境的名字,最後所需的安裝包跟在最後面 python=2.7numpy matplotlib pandas。這樣conda就會自動幫你處理好不同軟件包之間的依賴項,完成安裝。

對於兩種安裝方式而言,第一種是我個人更喜歡的形式。為什麼呢?

與他人分享你的環境

通過 environment.yml文件,我們可以輕鬆的將你分析所用的文件分享給別人。這一樣一來,能確保所用的軟件版本,分析的環境都是一致的。通過保存的不同的YML環境文件,我們可以清楚,方便的管理conda的每一個環境。

下面給大家一個例子,如果分享我們剛剛構建的 bwa_old環境:

  1. ##激活`bwa_old`環境
  2. conda activate bwa_old
  3. ### 輸出當前環境的文件配置
  4. conda env export -f test_env.yml
  5. ### 查看一下當前環境的文件配置
  6. cat test_env.yml
  7. name: bwa_old
  8. channels:
  9. - bioconda
  10. - defaults
  11. dependencies:
  12. - _libgcc_mutex=0.1=main
  13. - bwa=0.7.15=1
  14. - libgcc=7.2.0=h69d50b8_2
  15. - libgcc-ng=9.1.0=hdf63c60_0
  16. - libstdcxx-ng=9.1.0=hdf63c60_0
  17. - zlib=1.2.11=h7b6447c_3
  18. prefix: /opt/conda/envs/bwa_old

這時候,我們只要簡單的將 test_env.yml發給我們的合作者,這樣他們就可以使用到和咱們一樣的環境啦。

關於conda的一些雜七雜八

主要的內容介紹得差不多了,下面簡單總結一下關於conda剩下的一些雜七雜八。

如何刪除一個環境:

  1. conda env remove -n bwa_old

查看當前環境下所安裝的包:

  1. conda list -n bwa_old
  2. # packages in environment at /opt/conda/envs/bwa_old:
  3. #
  4. # Name Version Build Channel
  5. _libgcc_mutex 0.1 main
  6. bwa 0.7.15 1 bioconda
  7. libgcc 7.2.0 h69d50b8_2
  8. libgcc-ng 9.1.0 hdf63c60_0
  9. libstdcxx-ng 9.1.0 hdf63c60_0
  10. zlib 1.2.11 h7b6447c_3

指定你喜歡的安裝渠道,預先配置這些通道,以便每次創建環境時,都不需要指定下載的渠道:

  1. conda config --add channels conda-forge
  2. conda config --add channels bioconda

刪除不想要的conda包:

  1. conda remove bcftools

關於conda的介紹就到這裡了,希望你有所收穫。關於conda的使用,還有很多的細節還沒完全介紹完,具體的大家可以到conda官方說明文件去查看。於此同時,你是否在conda使用時遇到過坑,歡迎在留言區留言,和大家分享你曾踩過的坑


參考整理鏈接: https://davetang.github.io/reproducible_bioinformatics/conda.html

生信技能樹目前已經公開了三個生信知識庫,記得來關注哦~

每周文獻分享

https://www.yuque.com/biotrainee/weeklypaper

腫瘤外顯子分析指南

https://www.yuque.com/biotrainee/wes

生物統計從理論到實踐

https://www.yuque.com/biotrainee/biostat