[Linux]非root的R环境被conda破坏后如何恢复?
记录说明
这篇文章本来是用来记录Linux
非root
环境下安装PMCMRplus
包折腾过程,但后来试过了各种方法安装不上这个R
包后,我换上了Miniconda
来安装。经前人提醒,一开始安装Miniconda
我是没加入环境变量的。但一直激活不了虚拟环境,所以后来我又加入了环境变量试着安装,结果这一弄还真的污染了我原有的环境,很多R
包都加载和下载不了了。于是我卸了conda
,重新安装R
。但环境变了后,不管我是安装新的函数库,还是用之前的编译好的依赖库,怎么都安装不上了,我甚至安装新版GCC
重新编译也不行。能试的都试过之后,我决定重新恢复原有的R
和R
包。怎么做呢?有耐心的可以看看我折腾的过程,没耐心的直接翻到最后就好。
安装PMCMRplus
PMCMR
和PMCMRplus
是用来做秩和检验的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,将其所有依赖(包括GMP
和MPFR
)一并安装后也没有安装上Rmpfr
包。而Rmpfr
的依赖包gmp
是可以装上的。
最奇怪的是,我即使是指定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
,但我的就是连接不上。
同样,下载源码,在终端命令行下安装也报相同的错误。
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
参数,我指定库路径进行编译准备,可以通过。

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

还有个方法试下,就是用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
[Linux]非root的R环境被conda破坏后如何恢复?的更多相关文章
- linux环境变量设置错误后的恢复方法(转)
原文: http://blog.csdn.net/hoholook/article/details/2793447 linux环境变量设置错误后的恢复方法 中国自学编程网收集整理 发布日期:2008 ...
- linux非root用户下安装软件,搭建生产环境
之前的用实验室的服务器,因为某些原因,使用的用户没有root权限.linux的非root用户很多软件无法安装,非常的不方便.我的方法是使用brew来代替系统的包管理工具.brew是最先用在mac上的包 ...
- 【tf.keras】Linux 非 root 用户安装 CUDA 和 cuDNN
TensorFlow 2.0 for Linux 使用时报错:(cuDNN 版本低了) E tensorflow/stream_executor/cuda/cuda_dnn.cc:319] Loade ...
- [Linux] 非root安装GCC9.1.0
说明 一般Linux系统自带或公共的GCC版本都很低,如目前我们的服务器版本的GCC还停留在gcc-4.9.3,而官网已到达9.2版本(下载http://ftp.gnu.org/gnu/gcc/) , ...
- linux非root用户执行开机启动程序
问题 开机启动其他用户的程序或者说非root用户执行开机启动 编写开机启动脚本 编写开机启动脚本apple_tree,放到/etc/init.d,系统启动时会自动执行. 例如,/etc/init.d/ ...
- linux非root用户安装jdk1.8
如题,先到 Oracle 官方网站 下载1.8版本的 JDK 压缩包(jdk-8u221-linux-x64.tar.gz)到本地(如D盘的soft目录),然后开始进入linux的非root用户(如w ...
- Linux非root安装Python3以及解决SSL问题
说明 接上一篇. [Linux]非root安装Python3及其包管理 上一篇虽然成功安装了Python3及一些常用的模块,但因为一直装不上SSL模块,导致一些包无法安装,尝试了不少方法都失败了(网上 ...
- Linux非root用户安装jdk和tomcat
转载自:http://blog.csdn.net/wuyigong111/article/details/17410661,进行部分修改 创建一个用户 sgmm,并在其用户目录里面安装 jdk和tom ...
- Linux非root用户程序使用小于1024端口
在Linux下,默认端口1024下的是要在root下才能使用的,在其他用户下,如果尝试使用将会报错.在有的时候,我们可能考虑程序运行在root帐户下,可能会给Linux系统带来安全风险.那如何能够让非 ...
随机推荐
- 第五章第四周习题: Transformers Architecture with TensorFlow
目录 Transformer Network Packages 1 - Positional Encoding 1.1 - Sine and Cosine Angles Exercise 1 - ge ...
- java中this关键字总结
1.this是一个引用,也是一个变量,存储在JVM堆内存的Java对象内部. 2.this变量中保存的内存地址指向自身. 3.this可以在实例方法中使用,this指向当前正在执行这个动作的对象(th ...
- [no_code团队]项目介绍 & 需求分析 & 发布预测
项目 内容 2020春季计算机学院软件工程(罗杰 任健) 博客园班级博客 作业要求 团队项目选择 我们在这个课程的目标是 在团队合作中提升软件开发水平 这个作业在哪个具体方面帮助我们实现目标 进行项目 ...
- Java High Level REST Client 使用地理位置查询
Java High Level REST Client 使用地理位置查询 一.需求 二.对应的query语句 三.对应java代码 1.引入 jar 包 2.创建 RestHighLevelClien ...
- kafka错误之 Topic xxx not present in metadata after 60000 ms
Topic xxx not present in metadata after 60000 ms 一.背景 二.场景还原 1.jar包引入 2.jar代码 3.运行结果 三.问题解决 四.参考文档 一 ...
- 2021.8.19考试总结[NOIP模拟44]
T1 emotional flutter 把脚长合到黑条中. 每个黑条可以映射到统一区间,实际操作就是左右端点取模.长度大于$k$时显然不合法. 然后检查一遍区间内有没有不被黑条覆盖的点即可. 区间端 ...
- 单片机stm32F103单片机晶振不起振的原因分析
这是我在做单片机最小系统板时候碰到的问题,之前虽然也做过相似的板子,可是未曾出现过无源晶振不起振的问题.下面是我在遇到问题后的一些检查,排除问题的过程.本人小菜鸟一个,文章中如有错误和不足,还望各位大 ...
- 数据治理之元数据管理的利器——Atlas入门宝典
随着数字化转型的工作推进,数据治理的工作已经被越来越多的公司提上了日程.作为Hadoop生态最紧密的元数据管理与发现工具,Atlas在其中扮演着重要的位置.但是其官方文档不是很丰富,也不够详细.所以整 ...
- EasyX安装教程
Easyx是什么 就是一款可以在Windows里让你的C++程序里显示图片等的工具. 注意:EasyX不支持Linux.MacOS.不过还有Qt等可以选择. 安装VC/VS Easyx只支持Visua ...
- objcopy使用
objcopy - copy and translate object files:用于二进制文件的拷贝和翻译(转化) objcopy的man文件如下所示: objcopy [-F bfdname|- ...