本人临床专业研究生,自学生信单细胞测序部分内容,在构建单细胞相关包中遇到许多问题,部分按照网上分享大致解决,但仍有不少问题困惑我,希望能够与大家交流并共同搞定这些棘手问题!
!2022.4.19 更新!
经过一些其他视频和同学的指点,我发现一个被我严重忽略的注意事项。大家如果进行生物信息分析,需要利用biocmanager从bioconductor 上安装R包,mac一定要下载并安装XQuartz这个软件,直接百度、bing搜索就行,因为这个软件可以提供编译环境(我理解的),可以避免很大一部分我下面遇到的问题。当然,如果还遇到下面的问题,可以继续在用我再下面列出的解决方法!
本人电脑为Mac Monterey12.3,R版本为4.1.3,R studio版本为2022.02.0,为安装单细胞测序相关代码包,进行如下代码:
1.首先进行BiocManager以及devtools安装
if(!requireNamespace("BiocManager", quietly = TRUE))
install.packages("BiocManager")
if(!requireNamespace("devtools", quietly = TRUE))
install.packages("devtools")
2.其次设定需要安装的R包
bioPackages <-c(
"dplyr", "patchwork",
"limma", # 差异分析
"celldex", # 细胞类型参考数据集
"scuttle", # 对SummarizedExperiment对象进行计算
"pheatmap",
"BiocGenerics", 'DelayedArray', 'DelayedMatrixStats',
'limma', 'S4Vectors', 'SingleCellExperiment',
'SummarizedExperiment', 'batchelor', 'Matrix.utils',
"Seurat", "SingleR",
"tximport", # 读取Alevin结果到Seurat
"R.utils", "rliger", "fishpond",
"scater", "scran", "TSCAN", "slingshot",
"scRNAseq",
"AnnotationHub", "ensembldb",
"clusterProfiler", "org.Hs.eg.db",
"cowplot", "enrichplot"
)
3.批量安装
lapply( bioPackages,
function( bioPackage ){
if( ! bioPackage %in% rownames(installed.packages()) ){
CRANpackages <- available.packages()
if( bioPackage %in% rownames( CRANpackages) ){
install.packages( bioPackage, quiet = TRUE )
}else{
BiocManager::install( bioPackage, suppressUpdates = FALSE, update = FALSE, ask = FALSE)
}
}
}
)
写在最开始,如果出现不好解决的错误,大家可以先把R跟Rstudio都重装到最新版吧(狗头),我最开始碰到下面这么多错误的时候,就是这么干的哈哈哈哈哈哈哈。
问题一:批量安装时出现source form问题
Packages which are only available in source form, and may need compilation of
C/C++/Fortran:
Do you want to attempt to install these from sources? (Yes/no/cancel)
该情况为提示所安装的包仅有source form(氵原代码)格式,具体哪几包出现这个情况我记不清了,limma包是出现这种情况。选择no与cancel都不可安装,选择yes后会出现下载并安装,但是又出现ERROR并报错为缺少/xurn什么类的东西,具体忘记了。好像是缺少编译环境的意思。不知道是因为我的电脑原因还是因为其他原因,我同学的m1电脑就可以直接安装limma包,而且不出现上述报错提示,不知道是不是我的电脑曾经装过anaconda与python3的原因。
问题一解决:安装Xcode
此种情况可以借助安装Xcode软件解决,具体为我在App Store中安装的该软件,只要等到他安装完成就可以,友情提示该软件12G时间较长,要有耐心。安装后,这种情况还会出现,但是选择yes后可以安装成功。通过Rstudio中Packages库查看,相应包已在库中。用library加载后可能还会报错,此时关闭Rstudio重新打开,再次加载就可以。
问题二:安装相应软件后提示缺少文件
ld: warning: directory not found for option '-L/usr/local/gfortran/lib/gcc/arm/6.1.0'
ld: warning: directory not found for option '-L/usr/local/gfortran/lib'
ld: library not found for -lgfortran
该情况报错为从网上找的,我的电脑主要报错情况与这个一致,具体的可能为相关的路径不同,最主要的特点就是这三行,大概情况就是gcc与gfortran的directory not found问题。出现这种情况的包以scuttle为代表。此时也会将下载好的包继续删除,并报错。具体原因目前推测为编译环境的设置以及需要更新编译程序?我最后也不太懂。
问题二解决:安装gcc并创建文件(此处参考三篇文章)
https://cloud.tencent.com/developer/article/1587416
https://stackoverflow.com/questions/35999874/mac-os-x-r-error-ld-warning-directory-not-found-for-option
该情况由于我先看到的第一篇文章,我先按照第一篇文章中描述进行。首先安装homebrew,一个在mac电脑上安装并管理相关软件的一个集合软件(自我理解)。该软件安装参考此篇文章https://www.jianshu.com/p/e0471aa6672d?utm_campaign=hugo
在终端直接运行下面一行代码
/usr/bin/ruby -e "$(curl -fsSL https://cdn.jsdelivr.net/gh/ineo6/homebrew-install/install)"
我在安装时未出现文章中相关问题,但中途有提示更新或是其他什么情况,按照指示继续操作即可,中途可能有输入计算机密码过程。
安装完成后,可运行下面代码安装gcc
brew install gcc
安装完成后,可用下面代码查看安装位置
brew list gcc
像我的安装完成后为下图所示
此时我按照第一篇文章操作,将该目录下的一部分文件复制到报错信息提示的缺少的文件夹中去,在终端运行的代码如下
sudo mkdir -p /usr/local/gfortran/lib/gcc/arm/6.1.0
sudo cp -R /usr/local/Cellar/gcc/11.2.0_3/lib/gcc/ /usr/local/gfortran/lib/gcc/x86_64-apple-darwin15/6.1.0
注意需要根据自己的报错信息设定需要复制过去的文件地址,同时也要根据自己的gcc安装的链接进行编写代码,具体情况具体分析。mac终端相关代码可参考此篇文章
完成此步复制文件后,重新运行安装R包代码,但报错信息仍有,只不过还是问题二的样子少了前两行,仅返回最后那个-lgfortran行。此时根据第二、三篇文章,在终端中运行代码,先创建.R文件夹
mkdir ~/.R
之后跳转到.R文件夹中,终端运行代码
cd ~/.R
此时已在目标文件夹下,创建Makevars文件,具体代码如下
vim Makevars
该代码执行后会进入Makevars文件中,在此文件中相关操作具体可看此文章https://www.jianshu.com/p/f29a91aa3127
基本稳按i进入插入模式,并复制下面代码
VER=-11.2.0
CC=gcc$(VER)
CXX=g++$(VER)
CFLAGS=-mtune=native -g -O2 -Wall -pedantic -Wconversion
CXXFLAGS=-mtune=native -g -O2 -Wall -pedantic -Wconversion
FLIBS=-L/usr/local/Cellar/gcc/11.2.0/lib/gcc/11
其中注意更改版本信息,本人为11.2.0版本,VER以及FLIBS中的两处需要注意替换,文件路径应该没有问题,我没有改过。复制完成后按esc并:wq储存并退出vim,文件创建成功。
!2022.3.30更新 !
经过摸索,发现我原来的问题四报错原因为此Makevars文件编辑错误导致,因此大家一定要注意⚠️。大家可以看我在问题二参考文章的第二个链接内,有的回答将Makevars文件中的VER=-8,同时结合问题四的报错为gcc-11.2.0 command not found,外加brew list gcc显示的gcc安装列表中gcc, g++, c++均为-11,如下图所示
因此,最终的Makevars文件内应为VER=-11!!!
同时此前还有个致命错误,Makevars文件中的CFLAGS与CXXFLAGS这两行中,不是02而是O2...不是阿拉伯数字0而是大写的英文字母O。。。。。真的心态有点崩了要🤦♂️给大家把错误的和正确的贴出来,供大家观察,没想到最后居然是个这么样的错误哈哈哈哈哈哈哈
错误版Makevars文件
正确版Makevars文件
真的是奇奇怪怪的错误哈哈哈哈哈。此后Makevars文件算是大功告成,之后需要继续并依次进行问题四尝试方法1-3,就可以正常安装R包了。我下面也会再添加一点,帮大家捋一捋。
再次运行R包安装代码,安装成功。
问题三: 安装后报错缺少lzma.h文件
cram/cram_io.c:61:10: fatal error: 'lzma.h' file not found
#include <lzma.h>
^~~~~~~~
1 error generated.
make[1]: *** [cram/cram_io.o] Error 1
make: *** [htslib] Error 2
本次报错主要提示的缺少lzma.h文件,在网上进行相关搜索后,发现这个好像是个什么头文件啥的,具体的我也不太清楚。
问题三解决:安装相关文件与软件。
此处参考文章https://www.jianshu.com/p/146fd5133b71
首先在终端运行下面代码安装xz
brew install xz
终端运行下列代码查看lzma.h文件位置
sudo find /usr -name lzma.h
再将lzma.h文件复制到相应路径下,此处应该在lzma.h文件所在的路径下运行下面代码(具体当时的操作我好像忘记了,大家可以根据参考文章进行尝试)
cp lzma.h /usr/local/include
复制完成后,即可安装相应R包。
问题四:报错提示/bin/sh:gcc找不到文件
/bin/sh: gcc-11.2.0: command not found
make: *** [R_process_hairpin_reads.o] Error 127
此类错误出现在安装scRNAseq包时,提示我/bin/sh这里没有gcc-11.2.0这个文件。在终端cd到/bin目录下发现有/sh但确实没有gcc-11.2.0,此外/sh应该是个文件不是文件夹,cd /sh则会提示no such directory。因此我觉得应该是缺少文件的原因,并找寻解决方法。
问题四尝试方法1:添加环境变量。
在很多文章中强调了可能是因为环境变量的缺乏导致无法将gcc启动,大概这个意思。于是我首先在终端运行cd ~/打开个人这个目录,此时打开.bash_profile这个存储环境变量的文件
vim ./.bash_profile
并在其中添加相应环境变量语句,此处参考文章https://www.jianshu.com/p/463244ec27e3
添加如下代码,不同的路径书写不一样,需要注意(此处代码有变化,看下面2022.3.30更新)
export GCC_HOME=/opt/homebrew/Cellar/gcc/
export PATH=$PATH:$GCC_HOME
并保存退出,最后该文件如下
此时环境变量已添加完成,并运行下列代码使其生效
source ./.bash_profile
此时运行代码,依旧报错。
问题四尝试方法2:替换系统默认gcc为自己安装的gcc
此处参考此篇文章https://www.jianshu.com/p/4f3d4a8b2a9b
当我在终端运行gcc -v命令时,系统会返回gcc的版本,但是是Apple自带的gcc版本及clang的编译方式(自我模糊的理解)。于是我想是不是应该将更改一下,让系统直接识别为自己下载的gcc 11.2.0这个版本。于是还是vim ./.bash_profile这个文件,然后添加如下代码
alias gcc='gcc-11'
alias cc='gcc-11'
alias g++='g++-11'
alias c++='c++-11'
同样运行source ./.bash_profile使文件生效,此时在用gcc -v查看显示为自己安装的gcc版本,但是运行代码依旧报错。
问题四尝试方法3:创建替身或软连接
此处参考此https://developers.weixin.qq.com/community/develop/doc/000c8284bd43786f4c28cd34c5bc00
首先在终端执行命令which gcc查看gcc的位置,(不知道此处返回的位置是不是电脑自带的gcc或者自己安装的gcc,所以对结果可能导致没有影响)。我查看的是which gcc-11,因为我brew安装的为gcc 11.2.0,而且报错缺的也是gcc-11.2.0,而后创建替身,在终端运行下列代码
sudo ln -s /opt/homebrew/bin/gcc-11 /usr/local/bin
而后重新运行安装R包代码,依旧报错。
问题四尝试方法4:在/bin目录下添加gcc-11链接(最好别)
此处参考Linux相关文章
由于是Linux系统的解决方法,没有敢进行实践。同时此方法对该报错信息的描述为,/bin目录下缺少gcc-11的问题,而/bin目录好像是算根目录(我猜的),因为在/bin目录下用mkdir命令会提示,Read-only什么的错误,好像就代表着只读,无法添加。如果要强行添加需关闭SIP,如何关闭mac的SIP大家可以自行搜索,再次不过多赘述。但有一点,不知道是不是我的电脑问题,我在mac的恢复模式输入关闭SIP的命令后,会提示一行代码,选择y/n,选择y后会关闭SIP。但重启后,Rstudio打开则会报错,无法打开,但是直接打开CRAN的程序就可以。重新在恢复模式关闭SIP后,Rstudio可以正常打开,非常奇怪。大家注意就好。
!2022.3.30更新!
接上面的更新,再更改完Makevars文件后,先按照问题四尝试方法1进行配置环境变量,但环境变量内的语句发生变化。因为发现gcc-11, g++-11, c++-11好像还在更往下的目录中,大家可以根据查看自己brew安装gcc的路径,代码上面有就是brew list那个。因此最终文件为下图,别忘用source那段代码使其生效。
而后按照问题四尝试方法2中将mac默认的编译环境改为gcc。注意!此方法只能临时更改,当关闭终端再打开后默认的编译环境则变回系统内的,而不是我们自己安装的gcc,但bash_profile内的那四行语句则一直存在。因此,如果要安装R包的时候,需要我们用source那行命令,是bash_profile文件生效。如下所示
最后按问题四尝试3中创建软链接。经过前两步后,程序仍可能报bin/sh:XXX command not found,此时提示的是bin目录下缺少我们的的XXX程序,例如我的就报了/bin/sh:c++-11 command not found;或者可能出现make:路径/XXX No such file or directory,例如我的就报了make: opt/R/arm64/bin/gfortran No such file or directory。我的理解是这两种报错均为目录下少相应的软件文件。如果仍有这类错误,大家可以根据报错缺少的文件的原本路径(用which XXX查看),以及报错的路径进行创建软链接。
/bin/sh类错误:以我的为例,查看c++-11的原始路径后,创建软链接,软链接代码在上面的问题四尝试当法3:创建软链接或替身中。此类/bin的报错,只能在/usr/local/bin下更改,mac不允许在根目录下进行更改,因此原本问题四的尝试方法4:关闭SIP我觉得大家就还是不要尝试了为好哈哈哈哈哈。
make类错误:以我为例,同样查看gfortran的路径,并创建软链接。
至此全部问题就解决完了,开头所展示的R包全部安装完成,当然如果有的朋友安装过程中没有碰到这些问题,开头的两部分代码是完全可以安装的哈。感谢大家的耐心,看完我冗长的流水帐,谢谢!
总结
最后我除了scRNAseq, scran, ensemlab包因为问题四无法安装,文章开头的一大堆打包包中其余全部装上。(2022.3.30)最后的最后都成功了,但还是不知道自己当时哪根筋搭错要尝试生信,导师让看了看单细胞测序,结果按包就遇到了这么多问题。。。本人现在还是一个不太会生信的小白,希望这些踩雷能对大家有帮助,万分感谢大家,祝大家在自己的路上披荆斩棘!谢谢😄!