在我管理的基因組學羣裏,今天有人提出了這樣一個問題,如果有多個版本的BLAST,並且都是用conda安裝,應該如何調用不同版本的BLAST
對於這個問題,其實存在多種解決方案:
- 用絕對路徑進行調用
- 使用conda創建多個環境,用
source activate xxx
啓動該環境 - 使用
export/path/to/ncbi-blast-x.x:PATH
, 將對應版本的BLAST提前
在我還是一個普通用戶的時候,我用的就是上面的方法進行解決,直到有一天我成爲服務器管理員,我決定用過一個更加裝13的工具對環境變量進行管理,這個工具你或許也能在一些腳本看到,通常會用#進行註釋,例如 #moduleload gcc/6.3.1.
這種。
何爲Environment Modules
大部分Linux用戶管理環境變量的方式都是, exportPATH=/path/to/some/bin:/$PATH >> ~/.bashrc
,長期以往,當你 echo $PATH
時就會發現出現了大量的軟件路徑,在我眼裏,降低系統對工具的搜索速度是其次的,主要是不太好看。
而Module則是由管理員將不同軟件的環境配置寫好,然後用戶在登陸之後,只需要用 moduleload xxx
在環境增加自己所需的工具即可。
一個優秀的管理員,不會讓他的用戶去操心軟件安裝的問題,用啥conda,想用啥軟件用啥版本,一個module搞定。
別在評論區說docker,有些服務器的系統太老,說不定都裝不了docker,而且普通用戶未必有這個權限。
工具安裝和配置
由於Modules本來就是給管理員用於配置服務器環境,因此下面的安裝操作都是以Root權限進行。
在安裝Modules之前,先確保自己的系統上安裝 tcl-devel>=8.4
。隨後是編譯的常規步驟,
git clone https://github.com/cea-hpc/modules.git cd modules ./configure && make && make install
相對於安裝,配置則是比較麻煩一些,爲了保證用戶在登錄服務器的時候,能夠調用module,你得現將module的初始化腳本複製到 /etc/profiled.d
目錄下
ln -s /usr/local/Modules/init/profile.sh /etc/profile.d/modules.sh # ln -s /usr/local/Modules/init/profile.csh /etc/profile.d/modules.csh
這樣子每個用戶在登錄服務器的時候,shell會先執行 /etc/profile
,而 /etc/profile
的任務之一就是執行 /etc/profile.d/
下的所有shell腳本,也就將module的運行環境加入了用戶登錄的shell環境中。
之後是配置用戶能夠調用的模塊。你需要先在 /usr/local/Modules/modulefiles
增加不同軟件的配置信息,才能用 moduleload
進行加載。例如我希望用多個版本的blast,我的BLAST的軟件分別安裝在 /opt/biosoft/ncbi-blast-2.2.31+
, /opt/biosoft/ncbi-blast-2.7.1+/bin
。,我的操作如下。
先創建存放不同blast配置文件的文件夾
mkdir -p blast
然後在該目錄下,我編輯了兩個modulefile文件
"blast/2.2.31"爲
#%Module1.0##################################################################### ## modules modulefile module-whatis "NCBI BLAST 2.2.31" prepend-path PATH /opt/biosoft/ncbi-blast-2.2.31+/bin
"blast/2.7.1"爲
#%Module1.0##################################################################### ## modules modulefile module-whatis "NCBI BLAST 2.7.1" prepend-path PATH /opt/biosoft/ncbi-blast-2.7.1+/bin
當一個普通用戶登錄到服務器之後,他直接用 modulelist
是沒有加載任何模塊的,也不能用blast
moduleload blast/2.2.31
加載環境後,用戶就能在環境中找到blast
如果想要換個環境,就可以用 switch
進行切換。 moduleswitchblast blast/2.7.1
如果你不需要BLAST了,那麼就用 moduleunload blast/2.7.1
就能在環境變量中刪除這個工具。
小技巧: 對於一些依賴工具比較多的生信工具而言,用conda安裝會更加方便,那麼如何將 module
和 conda
進行整合呢?分爲兩步,
第一步,每一個分析流程都要新建一個環境,安裝到指定的目錄,以pb-assembly爲例
conda create -p /opt/biosoft/pb-assembly pb-assembly
第二步,爲將conda安裝的軟件新建一個modulefile,命名爲"pb-assembly"
#%Module1.0##################################################################### ## modules modulefile module-whatis "FALCON" prepend-path PATH /opt/biosoft/pb-assembly/bin
那麼就能用 moduleload pb-assembly
進行環境加載了。
推薦閱讀
上面僅僅是module的簡單用法,你還需要閱讀https://modules.readthedocs.io/en/latest/modulefile.html`瞭解更多和"modulefile"有關的知識。
以及閱讀https://modules.readthedocs.io/en/latest/INSTALL.html#configuration 定義一些默認加載的模塊。