R无法找到travis安装的软件包

时间:2015-08-07 13:31:22

标签: r packages travis-ci

我们正在尝试将一些单元测试添加到由travis运行的caret package,而不是CRAN上。这样可以节省CRAN上的构建时间,并减少他们为检查我们的软件包而必须安装的依赖项数量,同时让我们在travis上运行更完整的测试套件。

我认为我可以使用travis.yml file中的r_packages:行简单地安装测试要求:

r_packages:
 - ROSE
 - DMwR

However, my NOT_CRAN=TRUE builds are still failing。 (NOT_CRAN = FALSE运行正常,因为跳过了有问题的测试)

这真的很奇怪,如when I look at the build logs,我看到travis成功安装了我需要的所有软件包:

* installing *source* package ‘ROSE’ ...
** package ‘ROSE’ successfully unpacked and MD5 sums checked
** R
** data
** inst
** preparing package for lazy loading
** help
*** installing help indices
** building package indices
** testing if installed package can be loaded
* DONE (ROSE)

但是当我的测试运行依赖于那些包时,R无法找到它们:

> library(testthat)
> library(caret)
Loading required package: lattice
Loading required package: ggplot2
> 
> test_check("caret")
[1] "Reduced dimension to 3 by default. "
1 package is needed for this model and is not installed. (ROSE). Would you like to try to install it now?1. Error: check appropriate sampling calls by name -----------------------------

1: withCallingHandlers(eval(code, new_test_environment), error = capture_calls, message = function(c) invokeRestart("muffleMessage"), 
       warning = function(c) invokeRestart("muffleWarning"))
2: eval(code, new_test_environment)
3: eval(expr, envir, enclos)
4: caret:::parse_sampling(i) at test_sampling_options.R:14
5: checkInstall(pkgs)
6: stop()

testthat results ================================================================
OK: 62 SKIPPED: 0 FAILED: 1
1. Error: check appropriate sampling calls by name 

Error: testthat unit tests failed
Execution halted

(我认为)relevant line of code is here in caret's source code

good <- rep(TRUE, length(pkg))
  for(i in seq(along = pkg)){
    tested <- try(find.package(pkg[i]), silent = TRUE)
    if(class(tested)[1] == "try-error") good[i] <- FALSE
  }

为什么find.package函数找不到travis安装的软件包?他们会去某个特殊的独立图书馆吗?

另外,另外,如何使我的travis构建更简洁?默认情况下,它们似乎打印了太多信息(例如,它回应了测试和手册运行的所有代码,甚至是没有错误的代码)。

2 个答案:

答案 0 :(得分:10)

在Travis上测试您的软件包时,R CMD check似乎正在寻找错误位置的已安装软件包。

我创建了一个小测试包来解决这个问题:

使用R CMD check在Travis上测试包时,.libPaths()包含:

c("/tmp/RtmpnQE1WM/RLIBS_29bd3940b7fa",
  "/usr/lib/R/library")

使用devtools::test()在Travis上测试包时,.libPaths()包含:

c("/usr/local/lib/R/site-library",
  "/usr/lib/R/site-library",
  "/usr/lib/R/library")

默认情况下,Travis上的R个软件包已安装到/usr/local/lib/R/site-library(即.libPaths()的第一个条目)。很明显,R CMD check正在寻找错误的地方。

原则上,我们可以使用--library的{​​{1}}参数指向正确的位置,但是当您使用R CMD check时,--as-cran默认为--library }。

最简单的解决方案可能是将所有软件包(特别是&#34;其他&#34;软件包/usr/lib/R/libraryROSE)安装到DMwR。有很多方法可以做到这一点。一种解决方案是添加

/usr/lib/R/library

sudo mkdir -p /usr/lib/R/library echo 'R_LIBS=/usr/lib/R/library:/usr/lib/R/site-library/' > ~/.Renviron sudo chmod 2777 /usr/lib/R/library 文件的before_install部分。

答案 1 :(得分:2)

您可以克隆r-travis仓库并从您的副本中获取源代码。这样可以减少冗长。

关于&#34;找不到包裹&#34;:dunno。但Travis实例是一个普通的Ubuntu安装,所以你可以控制事物,通过回显到合适的~/.Rprofile等pp。我找到了 r-travis设置对我和recently blogged about one way to dramatically cut test times down更方便,更依赖于预先构建的r-cran-* .deb包。

迈克尔在他的回购中已经超过1000,你也可以通过PPA建立自己的回购。如果时间允许,我可以写另一篇博文,详细说明......