[Linux]非root的R环境被conda破坏后如何恢复?

记录说明

这篇文章本来是用来记录Linuxroot环境下安装PMCMRplus包折腾过程,但后来试过了各种方法安装不上这个R包后,我换上了Miniconda来安装。经前人提醒,一开始安装Miniconda我是没加入环境变量的。但一直激活不了虚拟环境,所以后来我又加入了环境变量试着安装,结果这一弄还真的污染了我原有的环境,很多R包都加载和下载不了了。于是我卸了conda,重新安装R。但环境变了后,不管我是安装新的函数库,还是用之前的编译好的依赖库,怎么都安装不上了,我甚至安装新版GCC重新编译也不行。能试的都试过之后,我决定重新恢复原有的RR包。怎么做呢?有耐心的可以看看我折腾的过程,没耐心的直接翻到最后就好。

安装PMCMRplus

PMCMRPMCMRplus是用来做秩和检验的R包,在Linux上安装时,后面那个PMCMRplus包出现了问题。

ERROR: dependency ‘Rmpfr’ is not available for package ‘PMCMRplus’

安装Rmpfr依赖时,出现了如下问题:

configure: error: MPFR Library must be at least version 3.0.0, see README
ERROR: configuration failed for package ‘Rmpfr’

是系统MPFR 版本太低了。MPFR是什么我也不知道,大概是和大数值相关的运算有关,而且和GMP一起常作为GCC安装的依赖。所以重装MPFR,下载地址https://www.mpfr.org/mpfr-current/。如果是root用户,这个问题一下解决了。

sudo apt-get install libmpfr-dev #Ubuntu系列
sudo dnf install mpfr-devel #Centos系列

再重新安装下R包就行了。但是非root安装依赖库很麻烦,只能源码编译安装。

wget https://www.mpfr.org/mpfr-current/mpfr-4.0.2.tar.bz2
tar -jxvf mpfr-4.0.2.tar.bz2
mkdir mpfr4 && cd mpfr-4.0.2
./configure --prefix="/path/software/mpfr4"

没那么容易,报错了:

checking whether gcc __attribute__ ((mode (XX))) works... yes
checking for recent GMP... no
configure: error: GMP 5.0.0 or newer is required

要升级GMP版本,GMP(The GNU Multiple Precision Arithmetic Library)又叫GNU多精度算术库,是一个提供了很多操作高精度的大整数,浮点数的运算的算术库,几乎没有什么精度方面的限制,功能丰富。
于是下载GMP,安装。下载地址:https://gmplib.org/#DOWNLOAD
好像除了6,没有其他版本。

wget https://gmplib.org/download/gmp/gmp-6.1.2.tar.bz2
tar -jxvf gmp-6.1.2.tar.bz2
mkdir gmp6 && cd gmp-6.1.2
./configure --prefix="/path/software/gmp6"
make
make check
make install

GMP6安装成功后,再次安装mpfr,配置时需要指定gmp6路径:

./configure --prefix="/path/software/mpfr4" --with-gmp=/path/software/gmp6
make
make install

再重新安装Rmpfr包,但还是报同样的错。于是将两个库加入环境中:

export LD_LIBRARY_PATH=/path/software/gmp6/lib:/path/software/mpfr4/lib:$LD_LIBRARY_PATH

问题还是存在,莫非要安装新的gcc吗?暂时搁下了,后续再说吧,linux真的好烦,哎~~~

configure: error: MPFR Library must be at least version 3.0.0, see README
ERROR: configuration failed for package ‘Rmpfr’
* removing ‘/ldfssz1/SP_MSI/USER/pengjianxiang/software/R_packages/Rmpfr’

下次装个新的GCC试试吧。


更新

实际上我重新装了一个GCC,将其所有依赖(包括GMPMPFR)一并安装后也没有安装上Rmpfr包。而Rmpfr的依赖包gmp是可以装上的。

image.png

最奇怪的是,我即使是指定MPFR库和GMP库来安装这个R包(包括GCC自动安装的依赖和我之前手动安装的这两个库)也链接不上。

我是怎么指定依赖库的呢?经同事指点,找到了configure.args参数。指定库的头文件和库文件。

#安装gcc时自动安装的依赖库
install.packages("Rmpfr",configure.args = c(Rmpfr = "--with-mpfr-include=/path/to/mpfr-3.1.4/include \\
--with-mpfr-lib=/path/to//mpfr-3.1.4/lib"))

#手动安装的依赖库
install.packages("Rmpfr",configure.args = c(Rmpfr = "--with-mpfr-include=/path/to//mpfr4/include \\
--with-mpfr-lib=/path/to//mpfr4/lib"))

结果还是链接到了原来旧版本的MPFR上。但这个人说他可以https://stackoverflow.com/questions/37287226/pass-configure-arguments-to-install-packages-in-r
,但我的就是连接不上。

image.png

同样,下载源码,在终端命令行下安装也报相同的错误。

R CMD INSTALL  --configure-args="--with-mpfr-include=/ldfssz1/SP_MSI/USER/pengjianxiang/software/mpfr-3.1.4/include \\
--with-mpfr-lib=/ldfssz1/SP_MSI/USER/pengjianxiang/software/mpfr-3.1.4/lib" Rmpfr_0.7-2.tar.gz

也试了下--configure-vars这个参数:

R CMD INSTALL --configure-vars='INCLUDE_DIR=... LIB_DIR=...'

不行。最后我试着解压Rmpfr源码,直接编译。configure中有--with-mpfr-include--with-mpfr-lib参数,我指定库路径进行编译准备,可以通过。

image.png

但生成的不是Makefile文件,而是src目录下的Makevars等文件。我也不知道能不能这么弄,反正不能make,最后也不能编译。
image.png

还有个方法试下,就是用conda了。


第二次更新

这一次用conda来安装试试。关于非root用户安装conda可以看看这个

conda create -n meta
source activate meta
conda search r-rmpfr  #可事先大小写分别在anaconda上试着搜一下
conda install r-rmpfr

安装成功后,which r-rmpfr找不到。用find命令来找找,试了大小写,最后找到,不知道为什么这么多库路径,也不知该用哪个:

$ find ./ -name '*Rmpfr'
./pkgs/r-rmpfr-0.7_2-r36ha9c3b96_1/lib/R/library/Rmpfr
./pkgs/r-rmpfr-0.7_2-r36ha9c3b96_1/lib/R/library/Rmpfr/R/Rmpfr
./envs/meta/lib/R/library/Rmpfr
./envs/meta/lib/R/library/Rmpfr/R/Rmpfr

最起码Rmpfr在系统上是安装上了,再试着安装下PMCMRplus包吧。接下来就有两种情况了:一是退出虚拟环境进入R,再指定库路径安装;二是仍在虚拟的conda环境中进入R,再进行安装。

首先是第一种情况:

$which R
#R仍然是我用的R3.5.2
$R
R version 3.5.2 (2018-12-20) -- "Eggshell Igloo"
Copyright (C) 2018 The R Foundation for Statistical Computing
Platform: x86_64-pc-linux-gnu (64-bit)

>.libPaths()
[1] "/my/software/R_packages"
[2] "/my/software/conda/miniconda/envs/meta/lib/R/library"
#库路径将conda的也加入了
> install.packages("PMCMRplus")
#然而失败了。

载入Rmpfr包试试:

> library(Rmpfr)
Error in library(Rmpfr) : there is no package called ‘Rmpfr’
> library(Rmpfr,lib="/my/software/conda/minicondaLoading required package: gmp

Attaching package: ‘gmp’

The following objects are masked from ‘package:base’:

    %*%, apply, crossprod, matrix, tcrossprod

Error: package or namespace load failed for ‘Rmpfr’ in rbind(info, getNamespaceInfo(env, "S3methods")):
 number of columns of matrices must match (see arg 2)
In addition: Warning message:
package ‘Rmpfr’ was built under R version 3.6.1

可知虽然Rmpfr已安装,但conda是用R3.6.1安装的,而我的R版本是3.5.2,因此在我的R上不能作为依赖来安装PMCMRplus

再看看第二种情况:

$ R

R version 3.6.1 (2019-07-05) -- "Action of the Toes"
Copyright (C) 2019 The R Foundation for Statistical Computing
Platform: x86_64-conda_cos6-linux-gnu (64-bit)

R is free software and comes with ABSOLUTELY NO WARRANTY.
You are welcome to redistribute it under certain conditions.
Type 'license()' or 'licence()' for distribution details.

  Natural language support but running in an English locale

R is a collaborative project with many contributors.
Type 'contributors()' for more information and
'citation()' on how to cite R or R packages in publications.

Type 'demo()' for some demos, 'help()' for on-line help, or
'help.start()' for an HTML browser interface to help.
Type 'q()' to quit R.

> .libPaths()
[1] "/ldfssz1/SP_MSI/USER/pengjianxiang/software/R_packages"
[2] "/ldfssz1/SP_MSI/USER/pengjianxiang/software/conda/miniconda/envs/meta/lib/R/library"

> install.packages("PMCMRplus")
#等了半天,比一般安装要慢很多。


conda是用R3.6.1安装的Rmpfr,库路径也是两个。晚上睡觉去了,放在后台龟速安装,不知为何,最后没装成功。

那么不进入虚拟环境,用conda安装的R直接安装这个包会如何呢?

$ /my/software/conda/miniconda/envs/meta/bin/R
> library(Rmpfr) #success
> .libPaths()
[1] "/my/software/R_packages"
[2] "/my/software/conda/miniconda/envs/meta/lib/R/library"
> library(PMCMRplus)
Error in library(PMCMRplus) : there is no package called ‘PMCMRplus’
> install.packages("PMCMRplus") #fail

> install.packages("PMCMRplus",lib="/my/software/conda/miniconda/envs/meta/lib/R/library")
make: *** [crwrapf90.o] Error 127
ERROR: compilation failed for package ‘PMCMRplus’

竟然还是失败的!若要解决,除非都用conda来安装R及其R包,工作量巨大。【补充:其实这个我后面也试过了,conda安装的R,根本运行不起来】


第三次更新

WF慈悲!果然成功地污染了之前的R环境,加载一些包的时候已经报错了。不得不重新安装。

> library(WGCNA)
Loading required package: dynamicTreeCut
Loading required package: fastcluster

Attaching package: ‘fastcluster’

The following object is masked from ‘package:stats’:

    hclust


Error: package or namespace load failed for ‘WGCNA’ in rbind(info, getNamespaceInfo(env, "S3methods")):
 number of columns of matrices must match (see arg 2)

然而即便是注释掉conda的环境变量,从头安装如WGCNA等包,也还是报错:

Error in rbind(info, getNamespaceInfo(env, "S3methods")) :
  number of columns of matrices must match (see arg 2)
ERROR: lazy loading failed for package ‘WGCNA’

于是手动将之前安装的WGCNA全删掉,再重新安装。还是不行!把所有的包全都更新了一遍,发现有很多包已经被破坏,装不上了。

解决方法

我决定重新装一个R!我想这个我有经验,应该没问题,就是麻烦了点。事实再次证明了图样图森破,无论我如何折腾都装不上了。包括用之前的gcc及其编译的依赖库,还是我新安装gcc来重新编译,反正就是报各种各样的缺函数库的错。期间我也重新安装了Anaconda来解决,无济于事。最后我决定恢复原有的R及其R包!

我之前的R已经编译完装好,应该不会有问题。根据报错提示,我先看看具体哪些包有哪些问题,但这样不能穷尽,很麻烦。加载或重新下载不成功的R包几乎都有这么一条错误:

Error in rbind(info, getNamespaceInfo(env, "S3methods"))

我们安装软件包时,都会创建一个名为.__ NAMESPACE__ 的隐藏环境 。它包含许多对象,报这个错误预示着其中一个被称为S3methods的文件已损坏。这些应该都是R库文件,那么我能不能建立全新的一个R包库来解决呢?事实证明竟然是可以的!于是我将环境变量的R库路径注释掉,重新建立了一个新的库路径,将所有R包转移到这一个路径上来。麻是麻烦了点,但总比我各种尝试导致崩溃要强点。

#export R_LIBS=/my/before/path/R_packages

这里要感谢这个回答给了我提示。否则我永远也不知道下一个正确的解决方法是什么。血的代价告诉自己,再也不轻易破坏环境了。

Ref:https://blog.csdn.net/u013310119/article/details/81081125
https://www.jianshu.com/p/bc909ce2e424
install-gcc-5.4-without-root

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,723评论 6 481
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,485评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 152,998评论 0 344
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,323评论 1 279
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,355评论 5 374
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,079评论 1 285
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,389评论 3 400
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,019评论 0 259
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,519评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,971评论 2 325
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,100评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,738评论 4 324
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,293评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,289评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,517评论 1 262
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,547评论 2 354
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,834评论 2 345