RStuido Server 选择不同的 R 版本(conda 中的不同 R 版本)

部署运行你感兴趣的模型镜像
自从上一次服务器重装系统之后,总感觉缺少了一些东西,安装R包很多依赖库报错,也可以解决,但总是存在,烦。

一天,一个同事问我说ggpubr包安装不成功,我就自己试了一下,真的是……安装不成功。

当你到了我这个年纪(破罐子破摔),你就会知道,「如果有包安装不上,那就不安装了」。所以我就用资深数据分析师那意味深长的语气劝他(而且一定要营造出分析结果不理想是他数据的问题),R包有很多,为何不换一个呢?

今天,另一个同事告诉我,说服务器的clusterProfilerenrichplot自从重新装了服务器,就没有安装成功做,做分析都是放到个人电脑上去做的。不能忍,今天就解决。因为我知道,折腾一下总能解决,但是我只想躺平。

1. 系统环境

  • 操作系统 centos7
  • R 版本 MRO4.0.2
  • 有root权限
  • 需要安装 clusterProfilerenrichplot

2. 头脑风暴

我有一个设想:

  • 用root权限,新建一个环境 R4.1,然后在里面安装R4.1
  • 在R4.1中安装那几个包
  • 将Rstudio的R版本设置为新建环境的R4.1

我的顾虑:

  • 不确定我用root新建的环境,能不能让大家使用
  • 不确定Rstudio-server能不能指定新建环境中的R4.1版本

3. 新建conda环境并激活进入

因为conda环境还挺大,所以我在空间大的地方,新建文件夹R4.1_and_Rstudio

「新建环境:」

conda create -p /mnt/data/R4.1_and_Rstudio

「激活进入环境:」

source activate /mnt/data/R4.1_and_Rstudio/

4. 安装R最新版R4.1.0

一行代码搞定:

conda install -c conda-forge r-base

安装成功之后,进入R:


R version 4.1.0 (2021-05-18) -- "Camp Pontanezen"
Copyright (C) 2021 The R Foundation for Statistical Computing
Platform: x86_64-conda-linux-gnu (64-bit)

R是自由软件,不带任何担保。
在某些条件下你可以将其自由散布。
'license()''licence()'来看散布的详细条件。

R是个合作计划,有许多人为之做出了贡献.
'contributors()'来看合作者的详细情况
'citation()'会告诉你如何在出版物中正确地引用R或R程序包。

'demo()'来看一些示范程序,用'help()'来阅读在线帮助文件,或
'help.start()'通过HTML浏览器来看帮助文件。
'q()'退出R.

>

可以看到,R4.1.0安装成功。

5. 安装最新版RStudio

一行代码搞定:

wget https://download2.rstudio.org/server/centos7/x86_64/rstudio-server-rhel-1.4.1717-x86_64.rpm
sudo yum install rstudio-server-rhel-1.4.1717-x86_64.rpm

好吧,这是两行。

6. 修改设置Rstudio-server选择R版本

修改参数:

vi /etc/rstudio/rserver.conf

将下面代码放到里面:

rsession-which-r=/mnt/data/R4.1_and_Rstudio/bin/R # 注意,这里是我们服务器上R4.1.0的路径

「重启Rstudio-server」

sudo rstudio-server status              #查看RStudio-server
sudo rstudio-server stop                #关闭RStudio-server
sudo rstudio-server restart             #重启RStudio-server

重启之后,打开Rstudio-server,发现R版本已经变为R4.1.0了,搞定!

7. 在conda环境中安装R包

「R4.1.0」

if (!requireNamespace("BiocManager", quietly = TRUE))
    install.packages("BiocManager")

BiocManager::install("clusterProfiler")
if (!requireNamespace("BiocManager", quietly = TRUE))
    install.packages("BiocManager")

BiocManager::install("enrichplot")

原本以为能安装成功,结果发现报错,类似这样:

2a4fdbbd-da44-42b7-9be0-1373d3203a27.png显示上面的包都安装失败,那我就分开安装,然后都安装成功了,最后这两个包也安装成功了。

胜利的喜悦:f41c69ec-dca4-4b35-86f3-4e1d01db1a95.png

8. Rstudio画图报错:version ZLIB_1.2.9 not found

其实,在R终端下,载入上面的软件包没问题,但是在Rstudio中载入就出错:

> library(clusterProfiler)
错误: package or namespace load failed for ‘clusterProfiler’ in dyn.load(file, DLLpath = DLLpath, ...):
 无法载入共享目标对象‘/mnt/data/R4.1_and_Rstudio/lib/R/library/png/libs/png.so’::
  /lib64/libz.so.1: version `ZLIB_1.2.9' not found (required by /mnt/data/R4.1_and_Rstudio/lib/libpng16.so.16)
> library(clusterProfiler)
错误: package or namespace load failed for ‘clusterProfiler’ in dyn.load(file, DLLpath = DLLpath, ...):
 无法载入共享目标对象‘/mnt/data/R4.1_and_Rstudio/lib/R/library/png/libs/png.so’::
  /lib64/libz.so.1: version `ZLIB_1.2.9'
 not found (required by /mnt/data/R4.1_and_Rstudio/lib/libpng16.so.16)

然后作图也报错:

> plot(1)
Error in RStudioGD() : 
  Shadow graphics device error: r error 4 (R code execution error)
此外: There were 50 or more warnings (use warnings() to see the first 50)

太难了,以为所有问题都解决了,出了这幺蛾子。

多年的(摸鱼)经验告诉我,不慌,先解决这个问题/lib64/libz.so.1: versionZLIB_1.2.9' not found`

先查看这个lib有哪些版本:

 strings /lib64/libz.so.1 |grep "ZLIB*"

结果:

ZLIB_1.2.0
ZLIB_1.2.0.2
ZLIB_1.2.0.8
ZLIB_1.2.2
ZLIB_1.2.2.3
ZLIB_1.2.2.4
ZLIB_1.2.3.3
ZLIB_1.2.3.4
ZLIB_1.2.3.5
ZLIB_1.2.5.1
ZLIB_1.2.5.2
ZLIB_1.2.7.1

果然没有ZLIB_1.2.9,那我看看服务器都有哪些/libz.so.1

find / -name "libz.so.1"

选几个看看看有没有ZLIB_1.2.9,然后将lib64的lib删掉,重新建立软链接。

# 确认其中的某一个libz.so.1含有ZLIB_1.2.9
strings /home/softwares/anaconda3/lib/libz.so.1 |grep "ZLIB*"

# 替换
rm /usr/lib64/libz.so.1
# 也可以使用ln -s来创建软连接
cp /home/softwares/anaconda3/lib/libz.so.1 /usr/lib64/

再次运行Rstudio-server,搞定!

9. 其它人用Rstudio-server安装R包

因为现在Rstudio-server用的是conda环境中的R4.1,它会在conda环境中有一个library,普通用户没有写入的权限,安装R包时会在自己的路径下自动新建一个library。如果安装包出错,就进入conda的环境,安装即可,绝对可以成功。

特别好使!

10. 总结

1,conda新建环境安装R4.1.0,因为是全新的环境,可以安装任何包都不会报错,如果报错了,就分开安装,然后再安装,一般都能解决问题。

2,外部是可以用conda环境中的程序的,指定路径就行。

3,Rstudio-server可以指定R版本,在/etc/rstudio/rserver.conf设置一下就行

4,如果有些软件安装比较麻烦,各种报错,不要在root下安装了,直接新建conda环境,在环境中安装配置好,用得时候绝对调用就行。

5,没有安装不了的R包,折腾一下总能实现。

参考:

http://showteeth.tech/posts/741.html https://cloud.tencent.com/developer/article/1819222



本文分享自微信公众号 - 生信科技爱好者(bioitee)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

您可能感兴趣的与本文相关的镜像

Python3.8

Python3.8

Conda
Python

Python 是一种高级、解释型、通用的编程语言,以其简洁易读的语法而闻名,适用于广泛的应用,包括Web开发、数据分析、人工智能和自动化脚本

<think>我们已经在conda中创建了一个名为r_env的环境,其中安装了新版本的GCC和R。现在需要在RStudio Server中使用这个环境。 步骤: 1. 确保RStudio Server能够识别并使用conda环境中的R解释器。 2. 配置RStudio Server使用指定conda环境中的R。 方法一:在RStudio Server中手动选择conda环境中的R解释器 方法二:通过修改RStudio Server的配置文件,默认使用conda环境中的R(需要管理员权限) 由于通常我们没有管理员权限,这里主要使用方法一。 具体步骤: 1. 首先,激活conda环境并找到环境中R的路径: ```bash # 激活环境 conda activate r_env # 查找R的路径 which R ``` 输出类似于:/path/to/miniconda3/envs/r_env/bin/R 2. 在RStudio Server中设置使用这个R解释器: - 登录RStudio Server - 点击菜单栏的 "Tools" -> "Global Options" - 在左侧选择 "General" - 在右侧的 "R version" 部分,点击 "Change..." - 选择 "Browse..." 然后找到上面得到的R路径(例如:/path/to/miniconda3/envs/r_env/bin/R) - 选中后,点击 "OK" 和 "Apply" 3. 重启R session(Session -> Restart R) 方法二(如果有管理员权限): 修改RStudio Server的配置文件,设置默认的R路径。 配置文件通常位于:/etc/rstudio/rserver.conf 添加一行:rsession-which-r=/path/to/miniconda3/envs/r_env/bin/R 然后重启RStudio Server服务。 4. 验证:在RStudio Server中运行 ```r > version ``` 查看输出中的“platform”是否包含conda环境的路径。 5. 注意:每次在RStudio中启动新的会话时,它会使用我们设置的R环境。但是,我们还需要确保编译环境变量(比如使用新版本的GCC)也被正确设置。 因为conda环境激活时会设置环境变量,而RStudio Server启动时可能不会自动激活conda环境。所以,我们可以通过设置RStudio的.Rprofile文件来确保环境变量正确。 在RStudio中,我们可以创建一个项目级的.Rprofile或者用户级的.Rprofile(通常是~/.Rprofile),添加以下内容(路径需要替换为实际的conda环境路径): ```r # 设置环境变量,以便使用conda环境中的编译工具 Sys.setenv(PATH = "/path/to/miniconda3/envs/r_env/bin:/usr/bin:/bin") # 将conda环境的bin目录放在前面 Sys.setenv(LD_LIBRARY_PATH = "/path/to/miniconda3/envs/r_env/lib") # 设置动态库路径 ``` 但是,更推荐的做法是让RStudio通过启动脚本来激活conda环境。我们可以写一个包装脚本来启动RStudio的Rsession。 如果没有管理员权限,使用方法一和设置.Rprofile是比较可行的。 另一种方法:在启动RStudio Server之前,在终端激活conda环境,然后启动RStudio Server(这种方法通常不适用,因为RStudio Server是作为服务运行的)。 因此,对于普通用户,最佳实践是: - 在RStudio选择conda环境中的R解释器 - 设置.Rprofile确保编译时使用正确的工具链 验证编译环境: 在RStudio中运行: ```r system("gcc --version") ``` 应该看到conda环境中安装的gcc版本(如12.1.0)。 示例代码:设置.Rprofile 首先,在终端中获取conda环境的路径(假设环境名为r_env): ```bash conda env list ``` 找到r_env的路径,例如:/home/user/miniconda3/envs/r_env 然后在RStudio中,创建一个.Rprofile文件(如果不存在则在用户主目录下创建): ```r # 打开文件 file.edit("~/.Rprofile") ``` 在文件中写入: ```r # 设置PATH和LD_LIBRARY_PATH conda_env_path <- "/home/user/miniconda3/envs/r_env" # 替换为你的实际路径 new_path <- paste0(conda_env_path, "/bin:", Sys.getenv("PATH")) Sys.setenv(PATH = new_path) Sys.setenv(LD_LIBRARY_PATH = paste0(conda_env_path, "/lib")) ``` 这样,在R启动时就会设置正确的环境变量。 注意:这种方法可能存在风险,因为它会修改全局的环境变量。为了避免影响其他R会话,可以在特定的项目中使用.Rprofile。 总结:在RStudio Server中使用conda环境的步骤: 1. 创建conda环境并安装所需软件。 2. 在RStudio Server的设置中选择conda环境中的R解释器。 3. 通过.Rprofile设置环境变量,确保使用conda环境中的编译工具(可选,如果编译包时仍然报错则设置)。 如果上述方法仍然无法解决编译问题,可能需要检查RStudio Server运行时的环境变量,确保它能够正确使用conda环境的库和工具。 注意:RStudio Server默认使用系统环境变量,因此通过.Rprofile设置环境变量在R会话中是有效的,但对于RStudio Server启动的子进程(如编译时调用的gcc)可能不够。如果遇到问题,可以尝试在启动RStudio Server之前激活conda环境(如果服务器由你控制),或者使用包装脚本启动RStudio Server。 由于权限问题,普通用户通常只能使用方法一(选择R解释器)并结合.Rprofile设置环境变量。 下面给出一个完整的示例步骤: 假设conda环境路径为:/home/user/miniconda3/envs/r_env 步骤1:在终端激活环境并获取R路径 ``` conda activate r_env which R ``` 假设输出为:/home/user/miniconda3/envs/r_env/bin/R 步骤2:在RStudio Server界面中,通过Tools -> Global Options -> General -> Change -> Browse,选择上述路径的R。 步骤3:创建~/.Rprofile文件(如果不存在则创建),并添加: ```r conda_env_path <- "/home/user/miniconda3/envs/r_env" current_path <- Sys.getenv("PATH") # 将conda环境的bin目录添加到PATH最前面 new_path <- paste0(conda_env_path, "/bin", ":", current_path) Sys.setenv(PATH = new_path) Sys.setenv(LD_LIBRARY_PATH = paste0(conda_env_path, "/lib")) ``` 步骤4:重启R会话。 步骤5:验证: ```r # 查看R使用的路径 R.home() # 应该返回conda环境中的R路径 # 查看gcc版本 system("gcc --version") # 应该显示conda环境中安装的gcc版本(例如12.1.0) ``` 如果编译R包仍然有问题,可能需要确保其他环境变量(如PKG_CONFIG_PATH)也正确设置,但通常conda环境已经设置好。 注意:如果同时安装了多个库,可能会出现冲突,所以最好在干净的conda环境中安装。 以上就是在RStudio Server中使用conda环境的步骤。 </think>### 在RStudio Server中使用Conda环境的完整指南 在RStudio Server中使用Conda环境需要配置R解释器路径和环境变量。以下是详细步骤: #### 方法1:通过RStudio界面手动选择Conda环境 ```r # 在RStudio中执行以下代码查找可用Conda环境路径 system("conda info --envs | grep 'r_env'", intern = TRUE) # 输出示例:/home/user/miniconda3/envs/r_env ``` 1. 登录RStudio Server 2. 顶部菜单选择 Tools > Global Options 3. 左侧选择 General > Change 4. 点击 Browse 导航到Conda环境的R路径:`/path/to/conda/envs/r_env/bin/R` 5. 点击 Select Folder > Apply > OK 6. 重启R会话(Session > Restart R) #### 方法2:配置Rprofile自动加载Conda环境 创建或修改 `~/.Rprofile` 文件: ```r # ~/.Rprofile 配置文件 conda_env_path <- "/path/to/conda/envs/r_env" # 替换为你的实际路径 # 设置R解释器路径 options(rstudio_binary_path = file.path(conda_env_path, "bin/rstudio")) # 设置环境变量 Sys.setenv( PATH = paste( file.path(conda_env_path, "bin"), Sys.getenv("PATH"), sep = ":" ), LD_LIBRARY_PATH = paste( file.path(conda_env_path, "lib"), Sys.getenv("LD_LIBRARY_PATH"), sep = ":" ) ) # 验证设置 cat("Using R from:", R.home(), "\n") ``` #### 方法3:创建环境包装脚本 创建启动脚本 `~/bin/rstudio_conda.sh`: ```bash #!/bin/bash # 激活Conda环境 source /path/to/conda/bin/activate r_env # 设置RStudio使用的R路径 export RSTUDIO_WHICH_R="${CONDA_PREFIX}/bin/R" # 启动RStudio会话 /usr/lib/rstudio-server/bin/rsession "$@" ``` 然后添加可执行权限: ```bash chmod +x ~/bin/rstudio_conda.sh ``` 在RStudio Server配置文件 (`~/.config/rstudio/rserver.conf`) 中添加: ``` rsession-which-r=/home/user/bin/rstudio_conda.sh ``` #### 验证环境配置 在RStudio中运行: ```r # 检查R版本和路径 sessionInfo() # 验证编译器版本 system("gcc --version") # 检查动态库链接 system("ldd $(R RHOME)/lib/libR.so | grep stdc++") # 安装测试包 install.packages("Rcpp") library(Rcpp) evalCpp("__cplusplus") # 应该返回201103L或更高 ``` ### 关键配置说明 1. **路径解析**: - Conda环境中的R路径通常为:`<conda_root>/envs/<env_name>/bin/R` - 使用 `conda env list` 查看所有环境路径 2. **环境变量传递**: - RStudio不会自动加载`bashrc`,必须显式设置 - `LD_LIBRARY_PATH` 确保正确加载新版libstdc++.so 3. **权限要求**: - 用户级配置只需修改`~/.Rprofile` - 系统级配置需管理员权限修改`/etc/rstudio/rsession.conf` 4. **多用户管理**: ```bash # 为所有用户设置默认Conda环境 sudo ln -s /opt/conda/envs/r_env/bin/R /usr/local/bin/R_conda # 在/etc/rstudio/rsession.conf中添加 rsession-which-r=/usr/local/bin/R_conda ``` ### 故障排查技巧 1. **环境未生效**: ```r # 检查实际使用的R路径 system("ps -p $PPID -o args=") ``` 2. **库加载错误**: ```bash # 查找缺失的库 ldd $(R RHOME)/lib/libR.so | grep "not found" ``` 3. **PATH优先级问题**: ```r # 显示当前PATH Sys.getenv("PATH") # 确保conda的bin目录在/usr/bin之前 ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值