Urs*_*ost 4 linux r rstudio-server
我们在 AWS 托管的 CentOS Linux 服务器上运行 RStudio Server。我们在服务器上有多个用户,每个用户都使用 RStudio Server。我们希望为所有用户提供一个通用路径来安装软件包,以便:
执行此操作的最佳程序是什么?
我提出的解决方案如下,但失败了:
保存我现有用户包的列表:
> save.pkg.list <- installed.packages()[is.na(installed.packages()[ , "Priority"]), 1]
> save(save.pkg.list, file="pkglist.Rdata")
Run Code Online (Sandbox Code Playgroud)
删除用户包:
> remove.packages(save.pkg.list)
Run Code Online (Sandbox Code Playgroud)
然后,我的想法是将软件包安装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"
Run Code Online (Sandbox Code Playgroud)
为了测试它,我尝试将一个包安装到共享文件夹中,看看服务器上的其他用户是否可以在他们的 R 实例中使用它。安装失败,很可能是因为它在 root 下,我假设我需要使用 sudo 权限(我拥有)但不确定如何将这些权限传递给 R 以进行软件包安装过程:
install.packages("dlm", lib = "/usr/share/R/library") Warning in install.packages : 'lib = "/usr/share/R/library"' is not writable
Run Code Online (Sandbox Code Playgroud)
最后,我假设需要对R_LIBS_SITE和R_LIBS_USER环境变量或类似的东西进行一些更改来控制默认的包安装/加载行为。但是,我还没到。
我从来没有试过这个,但我不明白为什么这不起作用:
您可以使用.libPaths()来设置库目录(不仅仅是获取它),那么为什么不让每个人都使用一个每个人都可以写的公共目录作为 libpath 呢?每个用户都可以放入他们的.Rprofile东西
.libPaths( c(.libPaths(), "/path/to/shared/lib") )
Run Code Online (Sandbox Code Playgroud)
然后该路径将是每个人安装/检索软件包的默认位置。
这种方法的一个问题是,人们仍然拥有每个人的原始 libPath,因此如果他们尝试更新现有包,它会更新他们自己的版本。您可以通过将 libpath 设置为 ONLY 新路径而不是附加到它来克服这个问题。
请注意,这有时会产生不良后果,有时人 A 的代码取决于某个包的某个版本,然后人 B 更新了该包,然后人 A 5 分钟后再次运行他的代码,突然之间它中断了,他们绝对不知道为什么。
| 归档时间: |
|
| 查看次数: |
5058 次 |
| 最近记录: |