也许更准确的标题是:“如何在 Linux (Red Hat/CentOS) 上从就地 (EPEL) R 安装切换到并行(特定于版本)R 安装?
一个(可能是典型的)在 Linux 上升级 R 的故事......
History:
在过去的某个时刻,我使用由 RHEL/CentOS 7 服务器下拉的默认版本更新了 R 版本yum
当时的包管理器。例如,sudo yum install R
在 2019 年初的某个时候更新到版本 3.5.2。默认情况下,这会将 R 安装在/usr/lib64/R
适用于所有用户,并完全替换之前安装的 3.4.x 版本。 Shiny Server 已安装,配置为以用户身份运行shiny
,并且它顺利地获取了新版本的 R。
情况:
一年后,现在是时候硬着头皮更新 Linux 服务器上运行的 R 版本了。跑步yum check-upgrade R
我发现可用的版本是3.6.0。我实际上想安装 3.6.3 并且不想破坏在 3.5.2 上运行的所有应用程序,因此我需要使用不同的方法。按照位于以下位置的说明进行操作:https://docs.rstudio.com/resources/install-r/ https://docs.rstudio.com/resources/install-r/,我下载了 3.6.3 .rpm 文件并安装它。默认情况下,这会将 R 安装在/opt/R/3.6.3/
,保留 3.5.2 版本不变。然而,一旦我完成了创建 R 的符号链接 https://docs.rstudio.com/resources/install-r/#create-a-symlink-to-r步骤,我的闪亮应用程序都不起作用:
sudo ln -s /opt/R/3.6.3/bin/R /usr/local/bin/R
sudo ln -s /opt/R/3.6.3/bin/Rscript /usr/local/bin/Rscript
这并不奇怪。我的闪亮应用程序都依赖于尚未为这个新版本的 R 安装的几个 R 软件包。通过删除这些符号链接,我可以快速让我的应用程序在以前的版本 (3.5.2) 上再次运行,直到我安装了新版本中必要的包:
sudo rm /usr/local/bin/R
sudo rm /usr/local/bin/Rscript
我闪亮的应用程序日志文件中的错误消息(位于/var/log/shiny-server/<app name>-<user>-<datetime>.log
)确认应用程序由于缺少软件包而无法启动。要更新共享库文件夹中的 R 包,我需要以 sudo 运行新版本的 R:sudo -i /opt/R/3.6.3/bin/R
并安装必要的软件包,例如install.packages(c("shiny","devtools","rmarkdown","shinydashboard","tidyverse"))
in R.
现在 R 包已安装,我可以重新创建符号链接:
sudo ln -s /opt/R/3.6.3/bin/R /usr/local/bin/R
sudo ln -s /opt/R/3.6.3/bin/Rscript /usr/local/bin/Rscript
我验证我的应用程序是否可以与新版本的 R 配合使用。
现在我有一些问题:
问题一:完成这些步骤后,R --version
仍然返回旧版本(3.5.2)。但是当我第二天重新登录时,它打开了3.6.3。为什么?我需要运行终端命令才能获取R --version
立即返回新版本还是打开新的终端窗口是实现此目的的唯一方法?
问题2:跑步sudo R --version
始终返回旧版本 (3.5.2)。跑步sudo which R
回报/bin/R
。跑步more /bin/R
显示的内容表明它是“R 可执行文件的 Shell 包装器”。并硬编码了“/usr/lib64/R”路径。我认为目前我不需要这个包装纸。让这些 sudo 命令指向新版本的推荐方法是什么?
我可以在我的主目录中创建该文件的备份副本(例如,cp /bin/R ~/binR.backup
)以防万一,然后:
- 删除/bin/R?
- 将 /bin/R 替换为新版本的符号链接(例如,
sudo ln -s /opt/R/3.6.3/bin/R /bin/R
)?
- 将“旧”版本重新安装到
/opt/R/3.5.2/
使用 .rpm 的方式与我安装 3.6.3 的方式相同,在那里安装软件包,然后删除/usr/lib64/R
版本(例如,sudo yum remove R
)?
我看过但没有回答我的问题的类似问题的链接:
- 如何在 Linux 中升级 R https://stackoverflow.com/questions/46214061/how-to-upgrade-r-in-linux
- 更改 Linux 中的路径 https://stackoverflow.com/questions/28333183/change-path-in-linux
- 如何在 Linux 中加载特定版本的 R https://stackoverflow.com/questions/26897335/how-can-i-load-a-specific-version-of-r-in-linux