背景:要安装clusterProfiler做富集分析,BiocManager::install("clusterProfiler"),报各种包安装失败
技能:Linux 和 R 安装包的方式
首先要区分是Linux的包,还是R的包
Linux的包,可以先安装apt-get
然后使用sudo apt-get install pkgname
或者sudo apt install pkgname
如果使用了conda
也可以使用conda install pkgname
,未提升下载包的速度,可以使用国内的镜像,方法是修改~/.condarc文件
安装R下的包时,可以使用R自带的install.packages("pkgname")
,切换软件源的方法是chooseCRANmirror()
,同样是选择国内源,可以提升下载速度。
也可以先安装BiocConductor,然后使用BiocManager::install("pkgname")
,切换软件源的方法是
chooseBioCmirror()
,这里又涉及到另外一个问题,如果选择国内源,而你的BiocConductor版本较低,可能找不到想要的包,还是需要切回默认的源。例如北大的源软件包很多只支持3.15以上,我的3.12就找不到想要的包。
建议是安装环境时将主要的包一次性安装好,保证所有的包都是最新且满足依赖关系。
问题1、安装stringi报错依赖库icudt61l.zip无法自动下载的问题
报错的截图没存,大概意思就是下载icudt包失败。原因是文件在外网,网络不通,解决办法:
1,手动下载所需要的文件 icu4c-69_1-data-bin-l.zip 到指定目录,例如/home/bio/tmp/
地址:https://download.csdn.net/download/ytybdgh/86823502
2,在Linux环境下下执行:
R CMD INSTALL --configure-vars='ICUDT_DIR=/home/bio/tmp/' stringi
或者进入R后执行
install.packages("stringi", configure.vars='ICUDT_DIR=/home/bio/tmp/')
如果是已经下载好stringi的文件,通过如下方式升级
install.packages("/home/bio/tmp//stringi_1.7.8.tar.gz", configure.vars='ICUDT_DIR=/home/bio/tmp/',repos = NULL)
问题2 在R里安装systemfonts报错:
核心报错是这一句:
ft_cache.h:9:10: fatal error: ft2build.h: No such file or directory 9
路线 1 按照 这个链接 https://cloud.tencent.com/developer/ask/sof/1168187 里面的解决方案
sudo apt-get update sudo
apt-get install libfontconfig1-dev
结果安装libfontconfig1-dev这个包时依赖的libexpat1-dev 又依赖libexpat1,然后报错当前版本高于需要版本,通过
sudo apt-get install libexpat1=2.1.0-4ubuntu1.4
进行降级
之后再根据类似提示对libc6降级时,又需要对大量重要的库降级,就放弃了这条路
路线 2 参照https://blog.csdn.net/qq_41104439/article/details/124708889
通过软链接解决,方法无效
ln -s /usr/include/freetype2/ft2build.h /usr/include/
路线3 从第一个问题和下面这个链接中获得灵感
https://blog.csdn.net/Wing_kin666/article/details/106020600
手动配置INCLUDE_DIR,不再报上面的错误
install.packages('systemfonts',configure.vars='INCLUDE_DIR=/home/bio/miniconda3/envs/rna-seq/include/freetype2/')
新报错如下:
** 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*
核心报错是 undefined symbol: FcFontSetDestroy
搜索发现这个函数是在fontconfig.h中,于是在Linux环境下,conda环境下,R环境下尝试卸载freetype2,fontconfig
下载systemfonts源文件,阅读configure文件,手动编译,以为安装完成了,还是不行。(需要1 configure 2 make 3 make install )
阅读configure文件发现存在一个command -v pkg-config 判断是否支持pkg-config,于是通过sudo apt-get install pkg-config
安装后继续尝试安装systemfonts,此时报错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
于是设置PKG_CONFIG_PATH
发现miniconda3/lib 和 miniconda3/envs/rna-seq/lib 下都有freetype2,于是删除了~/miniconda3/lib 目录下的freetype2相关文件
然后将包配置文件目录设置到虚拟环境的环境变量rna-seq中
conda env config vars set PKG_CONFIG_PATH=/home/bio/miniconda3/envs/rna-seq/lib/pkgconfig/
再次执行安装systemfonts,终于成功了,说明pkg-config这个包是一个好的工具,可以把依赖的头文件目录和库目录都配置好,后面安装clusterProfiler也比较顺利了。