背景:要安裝clusterProfiler做富集分析,BiocManager::install("clusterProfiler"),報(bào)各種包安裝失敗
技能:Linux 和 R 安裝包的方式
首先要區(qū)分是Linux的包,還是R的包
Linux的包,可以先安裝apt-get
然后使用sudo apt-get install pkgname 或者sudo apt install pkgname
如果使用了conda
也可以使用conda install pkgname ,未提升下載包的速度,可以使用國內(nèi)的鏡像,方法是修改~/.condarc文件
安裝R下的包時(shí),可以使用R自帶的install.packages("pkgname"),切換軟件源的方法是chooseCRANmirror(),同樣是選擇國內(nèi)源,可以提升下載速度。
也可以先安裝BiocConductor,然后使用BiocManager::install("pkgname"),切換軟件源的方法是
chooseBioCmirror(),這里又涉及到另外一個(gè)問題,如果選擇國內(nèi)源,而你的BiocConductor版本較低,可能找不到想要的包,還是需要切回默認(rèn)的源。例如北大的源軟件包很多只支持3.15以上,我的3.12就找不到想要的包。
建議是安裝環(huán)境時(shí)將主要的包一次性安裝好,保證所有的包都是最新且滿足依賴關(guān)系。
問題1、安裝stringi報(bào)錯(cuò)依賴庫icudt61l.zip無法自動(dòng)下載的問題
報(bào)錯(cuò)的截圖沒存,大概意思就是下載icudt包失敗。原因是文件在外網(wǎng),網(wǎng)絡(luò)不通,解決辦法:
1,手動(dòng)下載所需要的文件 icu4c-69_1-data-bin-l.zip 到指定目錄,例如/home/bio/tmp/
地址:https://download.csdn.net/download/ytybdgh/86823502
2,在Linux環(huán)境下下執(zhí)行:
R CMD INSTALL --configure-vars='ICUDT_DIR=/home/bio/tmp/' stringi
或者進(jìn)入R后執(zhí)行
install.packages("stringi", configure.vars='ICUDT_DIR=/home/bio/tmp/')
如果是已經(jīng)下載好stringi的文件,通過如下方式升級
install.packages("/home/bio/tmp//stringi_1.7.8.tar.gz", configure.vars='ICUDT_DIR=/home/bio/tmp/',repos = NULL)
問題2 在R里安裝systemfonts報(bào)錯(cuò):

核心報(bào)錯(cuò)是這一句:
ft_cache.h:9:10: fatal error: ft2build.h: No such file or directory 9
路線 1 按照 這個(gè)鏈接 https://cloud.tencent.com/developer/ask/sof/1168187 里面的解決方案
sudo apt-get update sudo
apt-get install libfontconfig1-dev
結(jié)果安裝libfontconfig1-dev這個(gè)包時(shí)依賴的libexpat1-dev 又依賴libexpat1,然后報(bào)錯(cuò)當(dāng)前版本高于需要版本,通過
sudo apt-get install libexpat1=2.1.0-4ubuntu1.4進(jìn)行降級
之后再根據(jù)類似提示對libc6降級時(shí),又需要對大量重要的庫降級,就放棄了這條路
路線 2 參照https://blog.csdn.net/qq_41104439/article/details/124708889
通過軟鏈接解決,方法無效
ln -s /usr/include/freetype2/ft2build.h /usr/include/
路線3 從第一個(gè)問題和下面這個(gè)鏈接中獲得靈感
https://blog.csdn.net/Wing_kin666/article/details/106020600
手動(dòng)配置INCLUDE_DIR,不再報(bào)上面的錯(cuò)誤
install.packages('systemfonts',configure.vars='INCLUDE_DIR=/home/bio/miniconda3/envs/rna-seq/include/freetype2/')
新報(bào)錯(cuò)如下:
** testing if installed package can be loaded from temporary location
Error: package or namespace load failed for ‘systemfonts’ in dyn.load(file, DLLpath = DLLpath, ...):
unable to load shared object '/home/bio/miniconda3/envs/rna-seq/lib/R/library/00LOCK-systemfonts/00new/systemfonts/libs/systemfonts.so':
/home/bio/miniconda3/envs/rna-seq/lib/R/library/00LOCK-systemfonts/00new/systemfonts/libs/systemfonts.so: undefined symbol: FcFontSetDestroy
Error: loading failed
Execution halted
ERROR: loading failed*
核心報(bào)錯(cuò)是 undefined symbol: FcFontSetDestroy
搜索發(fā)現(xiàn)這個(gè)函數(shù)是在fontconfig.h中,于是在Linux環(huán)境下,conda環(huán)境下,R環(huán)境下嘗試卸載freetype2,fontconfig
下載systemfonts源文件,閱讀configure文件,手動(dòng)編譯,以為安裝完成了,還是不行。(需要1 configure 2 make 3 make install )
閱讀configure文件發(fā)現(xiàn)存在一個(gè)command -v pkg-config 判斷是否支持pkg-config,于是通過sudo apt-get install pkg-config安裝后繼續(xù)嘗試安裝systemfonts,此時(shí)報(bào)錯(cuò)freetype2
* installing *source* package ‘systemfonts’ ...
** package ‘systemfonts’ successfully unpacked and MD5 sums checked
** using staged installation
Package fontconfig was not found in the pkg-config search path.
Perhaps you should add the directory containing `fontconfig.pc'
to the PKG_CONFIG_PATH environment variable
No package 'fontconfig' found
Package freetype2 was not found in the pkg-config search path.
Perhaps you should add the directory containing `freetype2.pc'
to the PKG_CONFIG_PATH environment variable
于是設(shè)置PKG_CONFIG_PATH
發(fā)現(xiàn)miniconda3/lib 和 miniconda3/envs/rna-seq/lib 下都有freetype2,于是刪除了~/miniconda3/lib 目錄下的freetype2相關(guān)文件
然后將包配置文件目錄設(shè)置到虛擬環(huán)境的環(huán)境變量rna-seq中
conda env config vars set PKG_CONFIG_PATH=/home/bio/miniconda3/envs/rna-seq/lib/pkgconfig/
再次執(zhí)行安裝systemfonts,終于成功了,說明pkg-config這個(gè)包是一個(gè)好的工具,可以把依賴的頭文件目錄和庫目錄都配置好,后面安裝clusterProfiler也比較順利了。