2011-05-24 113 views
2

我正在開發一個具有系統依賴關係(大部分包是用C++)的R包,並且正在尋找分發的最佳實踐。我相信沒有辦法用R軟件包來分發系統軟件包。似乎這個問題最近在this thread中引起了一些關注。沒有root權限的R包的系統依賴關係

假設用戶沒有root權限,並且正在使用R的本地安裝。他們在本地獲取這些軟件包的最佳方式是什麼?是否像下載共享庫一樣簡單,並將它們添加到$ R_HOME/Libraries中?或者最好是將它們下載到本地文件夾並設置LD_LIBRARY_PATH?

我對R相當陌生,所以我想知道是否有一個「首選」解決方案,以獲得最佳最終用戶體驗。

回答

1

如果他們實際上是系統庫,只需依賴他們,並可能通過autoconf進行測試。許多CRAN包裝都是這樣做的。

重新構建共享庫的部署方式最好留給操作系統,Linux發行版,系統管理員......而不是用戶空間應用程序。

+0

Dirk,謝謝你的回覆。不幸的是,這對我們來說只是一個非常不吸引人的選擇。這是一個最常用於大型計算集羣的學術應用程序,用戶通常使用他們所需的軟件包保留R的本地安裝。管理員可能會爲每個用戶請求添加系統軟件包而猶豫不決。我確實認爲這對R環境是一個有益的補充。 – 2011-05-24 19:30:33

0

你可以在inst/目錄中包含任何你想要的東西,包括lib子目錄。如果您只想在運行時訪問這些庫,則可以使用類似Sys.setenv(LD_LIBRARY_PATH=system.file("lib",package="mypkg"))的設置來相應地設置庫路徑。

如果您需要在安裝/編譯時鏈接庫,可能會有點麻煩。我可以想象,你可以設置你的配置腳本和Makefile(R擴展手冊第13-15頁)來查找正確的位置......但我不知道如何做到這一點,它可能需要一些把玩身邊做它(如果你這樣做,請記錄它!)

注意,包包含二進制文件不允許在CRAN(出於明顯的安全原因),雖然R-僞造不會允許他們...

(這個建議沒有被測試 - 我已經分發二進制可執行內,但從來沒有圖書館 - 所以我希望這是有益的,或者至少不會產生誤導。)

0

你可能會はnt查看bigmemory包的一種方法 - 它包括一個不重要的子集(16兆價值)的提升。

+0

不是那些模板頭文件,它們在編譯時會消失; OP希望對圖書館進行破解。本的答案更接近。 – 2011-05-25 14:07:15

+0

哎呀,本來可以發誓那些是'.cpp'文件。令人驚訝的是,增加了16兆的頭文件! – hadley 2011-05-25 15:10:32

+0

有幾個軟件包都提供Boost頭文件(在純模板中使用),所以我們討論瞭如何創建一個通用的包,這些包都依賴於這些包。 – 2011-05-25 15:21:18