簡體   English   中英

在Linux服務器上安裝R包以供多個用戶使用的位置?

[英]Where to install R packages on Linux server that are to be used by multiple users?

我們在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的軟件包安裝到root下的文件夾中。 在我的庫路徑中已經有一個似乎是共享文件夾/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環境變量或類似的東西進行一些更改來控制默認的包安裝/加載行為。 但是,我還沒有。

我從來沒有試過這個,但我不明白為什么這不起作用:

您可以使用.libPaths()來設置庫目錄(不僅僅是為了獲取它),那么為什么不讓每個人都使用一個可被大家寫為libpath的公共目錄? 每個用戶都可以放入他們的.Rprofile東西

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

然后該路徑將成為每個人安裝/檢索包的默認位置。

這種方法的一個問題是人們仍然會擁有每人的原始libPath,因此如果他們嘗試更新現有的包,它將更新自己的版本。 您可以通過將libpath設置為僅新路徑而不是附加到路徑來克服此問題。

請注意,這有時可能會產生不良后果,有時人A的代碼依賴於某個版本的軟件包,然后B人更新軟件包,然后A人在5分鍾后再次運行他的代碼,突然間它就會中斷並且他們絕對擁有不明白為什么。

一個臟的黑客就是將/ usr / share / R / library的寫入權限更改為所有用戶所屬的組。 或者給所有人寫入權限。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM