【问题标题】:Where to install R packages on Linux server that are to be used by multiple users?在 Linux 服务器上安装多个用户使用的 R 包的位置?
【发布时间】:2015-08-28 20:18:02
【问题描述】:

我们在 AWS 托管的 CentOS Linux 服务器上运行 RStudio Server。我们在服务器上有多个用户,每个用户都使用 RStudio Server。我们希望为所有用户提供一个通用路径来安装软件包,以便:

  1. 每个用户不需要为他们的 RStudio 用户配置文件安装每个包
  2. 如果一个人更新一个包,每个用户都将使用更新的

执行此操作的最佳程序是什么?

我提出的解决方案如下,但失败了:

保存我现有用户包的列表:

> save.pkg.list <- installed.packages()[is.na(installed.packages()[ , "Priority"]), 1]
> save(save.pkg.list, file="pkglist.Rdata")

删除用户包:

> remove.packages(save.pkg.list)

然后,我的想法是将save.pkg.list 中的软件包安装到根目录下的文件夹中。似乎已经有一个共享文件夹/usr/share/R/library,其中包含我的库路径中的一个包:

.libPaths() [1] "/home/ursus/R/x86_64-redhat-linux-gnu-library/3.1" "/usr/lib64/R/library" "/usr/share/R/library"

为了测试它,我尝试将一个包安装到共享文件夹中,并查看服务器上的其他用户是否可以在他们的 R 实例中使用它。安装失败,很可能是因为它在 root 下,我假设我需要使用 sudo 权限(我拥有)但不确定如何将这些权限传递到 R 以进行软件包安装过程:

install.packages("dlm", lib = "/usr/share/R/library") Warning in install.packages : 'lib = "/usr/share/R/library"' is not writable

最终,我假设需要对 R_LIBS_SITER_LIBS_USER 环境变量或类似的东西进行一些更改,以控制默认的包安装/加载行为。但是,我还没到。

【问题讨论】:

    标签: linux r rstudio-server


    【解决方案1】:

    一个肮脏的技巧是将 /usr/share/R/library 的写入权限更改为所有用户所属的组。或者给所有人写权限。

    【讨论】:

      【解决方案2】:

      我从未尝试过,但我不明白为什么这不起作用:

      您可以使用.libPaths() 设置库目录(不仅仅是获取它),那么为什么不让每个人都使用一个所有人都可以写入的公共目录作为libpath?每个用户都可以输入他们的.Rprofile 类似

      .libPaths( c(.libPaths(), "/path/to/shared/lib") )
      

      那么该路径将成为每个人安装/检索包的默认位置。

      这种方法的一个问题是每个人仍然拥有他们原来的 libPath,所以如果他们试图更新现有的包,它会更新他们自己的版本。您可以通过将 libpath 设置为仅新路径而不是附加到它来克服这个问题。

      请注意,这有时会产生不好的后果,有时 A 的代码依赖于某个包的某个版本,然后 B 更新包,然后 A 5 分钟后再次运行他的代码,然后突然中断他们完全不知道为什么。

      【讨论】:

        猜你喜欢
        • 2017-04-04
        • 1970-01-01
        • 2018-06-26
        • 2018-07-28
        • 2013-12-12
        • 2013-06-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多