簡體   English   中英

無法從本地文件安裝源程序包

[英]Trouble installing a source package from a local file

這似乎是一個菜鳥錯誤,因為可能是。 我有一個要安裝的內置源程序包。 這是一個本地文件,我只想檢查以確保它可以工作。 一切似乎都進行得很順利,沒有錯誤...但是也沒有任何功能。

> dir.create("packageCheck")
> install.packages("Rpackages/saber_0.1.tar.gz",   
                   lib = "packageCheck", repos = NULL)
# * installing *source* package ‘saber’ ...
# ** R
# ** inst
# ** preparing package for lazy loading
# ** help
# *** installing help indices
# ** building package indices
# ** testing if installed package can be loaded
# * DONE (saber)
> list.files("packageCheck")
# [1] "saber"
> list.files("packageCheck/saber")
# [1] "DESCRIPTION" "extdata"     "help"        "html"       
# [5] "INDEX"       "Meta"        "NAMESPACE"   "R"          
> devtools::load_all("packageCheck/saber")
# Loading saber
> library("saber", lib.loc = "packageCheck/saber", logical.return = TRUE)
# [1] TRUE
> ls(2)
# character(0)
> ls("package:saber")
# character(0)

我在這里做錯了什么?

注意:

> version[[1]]
# [1] "x86_64-pc-linux-gnu"
> getOption("pkgType")
# [1] "source"

問題是devtools::load_all()不用於加載已安裝的軟件包。 它打算在包的源代碼樹中使用。 例如,如果您只是在包的源代碼樹中說了load_all() ,那么它應該可以工作。

我猜發生了什么,就是load_all()尋找.R文件以加載到已安裝的程序包中,但是已安裝的程序包中沒有.R文件,當您安裝程序包時,R函數被放置在數據庫中:

/tmp/saber (master)$ ls -l packageCheck/saber/R/
total 24
-rw-r--r--  1 gaborcsardi  wheel  1056 Jul 25 23:27 saber
-rw-r--r--  1 gaborcsardi  wheel  3317 Jul 25 23:27 saber.rdb
-rw-r--r--  1 gaborcsardi  wheel   246 Jul 25 23:27 saber.rdx

因此, load_all()找不到要加載的任何內容,但是仍然創建了一個名為saber的命名空間。 然后,當您嘗試使用library()加載程序包時,該函數將立即返回,因為它注意到search()列表中存在一個saber名稱空間,因此它假定該程序包已被加載。

解決方案是

  1. 只需使用load_all() ,然后在軟件包的源目錄中reload() ,而無需實際安裝它。 (我可能不確定,您可能需要構建。)大多數情況下,這是可行的。
  2. 或者只是使用library來加載已安裝的軟件包:

    library("saber", lib.loc = "packageCheck", logical.return = TRUE)

    這有點不太方便,因為您需要一直構建和安裝,並且在R中卸載/重新加載軟件包可能會失敗。

只是不要在已安裝的軟件包上使用load_all()

暫無
暫無

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

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