如何在Linux(Red Hat/CentOS)上更新到特定的R版本,保持以前的版本?
一个(可能是典型的)在Linux上升级R的故事 历史记录: 在过去的某个时候,我在RHEL/CentOS 7服务器上使用当时由如何在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 情况: 一年后,现在是时候咬紧
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