如何在Linux(Red Hat/CentOS)上更新到特定的R版本,保持以前的版本?

如何在Linux(Red Hat/CentOS)上更新到特定的R版本,保持以前的版本?,r,linux,shiny,centos7,R,Linux,Shiny,Centos7,一个(可能是典型的)在Linux上升级R的故事 历史记录: 在过去的某个时候,我在RHEL/CentOS 7服务器上使用当时由yumpackage manager下拉的默认版本更新了R的版本。例如,在2019年初的某个时候,sudo-yum将R安装到3.5.2版。默认情况下,这将为所有用户在/usr/lib64/R处安装R,并完全取代以前安装在那里的3.4.x版本。Shining Server已经安装,配置为以用户Shining的身份运行,它顺利地获得了新版本的R 情况: 一年后,现在是时候咬紧

一个(可能是典型的)在Linux上升级R的故事

历史记录:

在过去的某个时候,我在RHEL/CentOS 7服务器上使用当时由
yum
package manager下拉的默认版本更新了R的版本。例如,在2019年初的某个时候,
sudo-yum将R
安装到3.5.2版。默认情况下,这将为所有用户在
/usr/lib64/R
处安装R,并完全取代以前安装在那里的3.4.x版本。Shining Server已经安装,配置为以用户
Shining
的身份运行,它顺利地获得了新版本的R

情况:

一年后,现在是时候咬紧牙关更新Linux服务器上运行的R版本了。运行
yum检查upgrade R
我发现可用的版本是3.6.0。实际上我想安装3.6.3,我不想破坏所有运行在3.5.2上的应用程序,所以我需要使用不同的方法。按照中的说明,我下载了3.6.3.rpm文件并安装它。默认情况下,这将在
/opt/R/3.6.3/
处安装R,保持3.5.2版本不变。但是,一旦我完成这一步骤,我的所有闪亮应用程序都无法工作:

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/shinny服务器/

  • 问题1:我不知道为什么,但是在您的路径上有多个版本的R可能会导致类似这样的意外情况。
    /usr/local/bin
    通常在路径中位于
    /usr/bin
    之前,所以我希望找到R3.6.3。也许这与问题2有关

    问题2:一些发行版(如CentOS/RHEL)在使用sudo时,默认情况下不要将
    /usr/local/bin
    放在路径上。有关详细信息,请参阅。那里的答案描述了在使用sudo时将
    /usr/local/bin
    添加到路径的几种方法——例如,在
    /etc/sudoers
    中修改
    安全路径
    ,以包括
    /usr/local/bin
    ,如:

    Defaults    secure_path = /usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
    
    由于R 3.6.3在路径中位于默认系统R之前,您不必删除
    /bin/R
    /usr/bin/R
    。但最终,我建议您使用相同的方式安装R的多个并排版本,这样更易于管理。下次安装新的R版本时,您只需更换
    /u中的符号链接即可sr/local/bin
    。默认的系统R(来自EPEL)意味着是系统上唯一的R,具有就地升级


    如果要用并列的R3.5.2(或3.5.3)替换默认的R3.5.2,可以从安装R3.5,安装所有必要的软件包,并让服务器使用新的R3.5。然后从EPEL卸载R(
    R-core
    R-core-devel
    )要完全切换。从那里,您甚至可以在
    /usr/bin
    中创建指向R的符号链接,而不是
    /usr/local/bin
    ,并且不用担心将
    /usr/local/bin
    添加到sudo路径。

    啊哈!
    /usr/local/bin
    对于我的用户来说在
    /usr/bin
    之前,但作为sudo,它不在那里。这似乎解决了问题estion 1,我将对此进行更深入的研究。这是澄清:“默认的系统R(来自EPEL)意味着是系统上唯一的R,具有就地升级。”我没有想到这两种安装类型是“并排”和“独立”/“就地”,但这种分类很有意义。非常有用,谢谢!结束循环:在删除EPEL版本(
    sudo-yum-remove R
    和R-core、R-core-devel、R-devel、R-java、R-java-devel)之后,
    sudo其中R
    再也找不到R了(自从/usr/bin/R被删除后)。创建一个符号链接
    sudo ln-s/opt/R/3.6.3/bin/R/usr/bin/R
    可以解决这个问题,正如您所说的。
    Defaults    secure_path = /usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin