问题 如何在Debian上安装2个不同的R版本?


在我们的服务器上,按照说明安装R 2.12.1 http://cran.r-project.org/bin/linux/debian/ ,使用 apt-get install 等等

由于情况,老lenny机器还没有更新到新的稳定debian,看起来这不会很快发生。由于这里的一些研究取决于最新版本的VGAM,我们需要在debian上安装R 2.14.0。但是为了保持旧代码运行,我们不能只丢弃R 2.12.1(在此版本上安装VGAM 0.8.4会产生错误)。

所以我们需要安装2个R版本。从我理解的很少,如果我们只是使用 apt-get upgrade 旧版本将被新版本取代。我一直在阅读大量文档,但我找不到这样做的最佳方式。

我现在唯一想象的就是尝试从源代码构建最新的R,但是我的同事并不热衷于这个想法并促使我首先寻找另一个解决方案。我错过了任何信息,或者是否有人愿意向我展示完成这项工作的小技巧?如果从源头构建解决方案,我想知道任何陷阱或可能的问题。


9816
2017-12-01 15:18


起源

我不认为apt / aptitude解决方案是可行的。如果有可能的话,它可能比从源代码构建更困难和复杂,我发现在基于Debian的Linux上它非常简单易用。此外,您可以通过编译最新的BLAS库来打动所有朋友,这总是很有趣,而且非常重要。 - jthetzel
apt / aptitude解决方案 可以 如果有人重写整个Debian包装以允许多个版本(尽可能多的包,例如Emacs或PostgreSQL),这是可能的。不幸的是,我没有时间去做。 - Dirk Eddelbuettel
@jhetzel:又是一种常见的误解。你做 不 再次编译特定的BLAS,你只需在运行时交换它们。在CRAN上查找我的gcbd包小插图以获取一些细节。 - Dirk Eddelbuettel


答案:


正如我在评论中提到的,这是 理论上 可能就像一些软件包系列(Emacs,PostgreSQL,...)允许多个并发版本一样。

我们现在无法提供,因为我们使用 /usr/{share,lib}/R 哪些冲突。如果我这样做的话 /usr/{share,lib}/R-$version 然后使用 dpkg-alternatives 要翻到默认的首选,我们可能会这样做。问题在于过渡。少数用户使用此功能,获得它可能会导致大多数错误,直到这是稳定的。另外,我没有空余时间(但如果其他人想要这样做,请这样做)。

在此期间,你可以

  1. 可能使用的高级功能 dpkg 并解压缩到本地目录而不是下面的默认目录 /  - 所以 /opt/R/oldversions/2.12.1 应该是可能的。 R甚至可以运行,你需要重新定义 $RHOME 因此。

  2. 只需将本地变体构建到 /usr/local 如果你  必须

  3. 如果特定的CRAN /非CRAN软件包声称需要特定版本的R,请修复该死的软件包! ;-)

最后,这是一个主题 r-sig-debian 例如,CRAN维护者Michael和Johannes不会在这里阅读这个帖子。


4
2017-12-01 17:43



谢谢你的帮助。我忘记了邮件列表,但我确实记得你偶尔经过这里:)。我会记住它。 - Joris Meys


您可以使用正确的编译标志安装不同版本的ANY软件。 使用--help运行configure脚本时,您应该看到一个选项以查看安装 根。

看一眼

./configure --help
...
Installation directories:
  --prefix=PREFIX         install architecture-independent files in PREFIX
                          [/usr/local]

所以你可以安装R-2.14到:

/usr/local/R/2.14

你可以安装R-2.12到:

/usr/local/R/2.12

当您启动configure脚本时:

./configure --prefix=/usr/local/R/2.14

等等。


7
2017-12-01 15:22



对于系统范围的使用,您可以在例如系统中创建一个符号链接。在/ usr / bin /中。 - Paul Hiemstra
你的意思是手册?有时在INSTALL文件中找到类似的东西...... - Oz123
抱歉我的含糊不清。 R可执行文件的符号链接,请查看下面的答案。 - Paul Hiemstra
@ Oz123:我之前的评论有点苛刻。但是如果我从源代码构建,那么你的解决方案就是我要做的。我希望有一个更清洁的apt-get或相关解决方案。 - Joris Meys
如果您需要在许多服务器上重新部署(这不是您的情况),您始终可以使用checkinstall重新打包您的构建。 - Oz123


我认为如果没有提供多个版本的debian repo,很难保持两个版本的R平稳运行而不从源代码编译R。

我经常做的是在我的家庭目录中安装R,因为我们的研究所没有给我们root权限。要在系统范围内安装R版本的源代码,可以将其安装在单独的目录中(例如/opt/R2.14)并使用:

./configure --prefix=/opt/R2.14/

最后一步是创建一个指向R二进制文件的符号链接:

ln -s /opt/R2.14/bin/R /usr/bin/R2.14

用户可以启动两个版本的R(R和R2.14)。希望这可以帮助!


3
2017-12-01 15:29



感谢提示。我必须在全系统安装它。我们的系统管理员在一年多前离开了大楼,所以我现在是'志愿者'来照顾它。拥有生物学学位和统计学的额外硕士学位,这并不是那么明显...... - Joris Meys
我做了类似的事情,将R-devel保留在/ usr / local中。 - Dirk Eddelbuettel


确实,从源代码构建R非常容易(即使我可以做到!),只要您知道以下命令首先运行:

apt-get build-dep r-base

否则你可能会丢失库类型错误 make。感谢Dirk过去发布的那颗宝石。我在手册,自述文件或常见问题中没有看到。

然后,它只是:

./configure
make

我想这可能是你的考虑因素:R是否使用静态或动态系统库?可能是一个自建的R链接到不同的库,而不是预先打包的二进制R? (我不知道)。你进入多少取决于我猜你的应用程序的重要性以及哪些系统库对你至关重要。


0
2017-12-01 16:35



这可能是次优构建。如果您知道如何使用Debian源代码,请执行本地Debian构建。 - Dirk Eddelbuettel
@DirkEddelbuettel为什么这不是最理想的?你对“本地Debian构建”是什么意思?我用Google搜索,但只有3个结果。 - Xu Wang
我们默认打开几个开关来配置,参见diff.gz. - Dirk Eddelbuettel
好的谢谢 。 - Xu Wang