【问题标题】:R can't find packages installed by travisR 找不到 travis 安装的软件包
【发布时间】:2015-10-30 23:22:44
【问题描述】:

我们正在尝试将一些单元测试添加到由 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 构建为 r 不那么冗长?默认情况下,它们似乎打印了太多信息(例如,它回显了测试和手册运行的所有代码,甚至是没有错误的代码)。

【问题讨论】:

    标签: r packages travis-ci


    【解决方案1】:

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

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

    在 Travis 上使用 R CMD check 测试包时,.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 找错了地方。

    原则上,我们可以使用R CMD check--library 参数来指向正确的位置,但是当您使用--as-cran 时,--library 默认为/usr/lib/R/library

    最简单的解决方案可能是将所有软件包(尤其是“附加”软件包ROSEDMwR)安装到/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
    

    到您的.travis.yml 文件的before_install 部分。

    【讨论】:

    • 某处还有另一个错误,这是一个糟糕的创可贴。我不使用devtools,但我有数百个来自 GitHub 源、CRAN 源或(首选)二进制文件的 Travis 构建。我从来没有遇到过这个问题。作为此处使用的 Debian/Ubuntu R 软件包背后的人(及其.libPaths() 定义,我发现直接安装到/usr/lib/ 有点令人反感......我怀疑您的第一个路径显示可能是由于某些特定选择其他设置变量。也许 Craig Citro 会知道。
    • 上述问题出现的唯一原因是他想在测试期间使用未在DESCRIPTION 中列为依赖项的附加包。最简单的解决方法是告诉R CMD check 在哪里寻找它们(使用 Renviron 和 check.Renviron)。但是,当我使用--as-cran 时,所有这些定义都会被忽略,R CMD check 只会在临时文件夹和/usr/lib/... 中查找包。是的,这是 Travis 特有的。在本地,R CMD check --as-cran 也在我的主文件夹中查找包。再一次,R_LIBS 在通常的地方的定义被忽略了。
    • @jtilly:如果您仍然想测试可选(阅读:Enhances:)功能怎么办?你的逻辑意味着包不能 1. anythingEnhances: 和 2. 完全测试。
    • 不,我没有这么说。 Zach 正在寻找一种方法来测试他的包,而无需在描述中指定测试所需的一些依赖项(即不使用 Enhances:Suggests:)。我只是说,如果你想这样做,然后使用--as-cran 检查你的包,那么你最好确保这些包在正确的目录中,否则 R 将找不到它们。
    • 这对我来说仍然是个问题,尤其是在从 Rutter PPA 安装 R 二进制包时,其中包含:'binary_packages: Rcpp'。这部分编写 R 扩展可能有助于解决某些问题:cran.r-project.org/doc/manuals/r-release/…。值得注意的是,PPA 二进制文件的 /usr/lib/R/site-library 安装位置不在 R 库搜索路径中,它有 ~/R/Library ~/travis/R-bin/lib/R/library,和 /usr/local/lib/R/site-library
    【解决方案2】:

    您可以克隆 r-travis 存储库并从您的副本中获取源代码。这可以让你让它不那么冗长。

    关于“未找到包”:不知道。但是 Travis 实例是一个普通的 Ubuntu 安装,因此您可以通过回显到合适的 ~/.Rprofile 等 pp 来控制事物。我找到了 old r-travis 设置通过更多地依赖预先构建的r-cran-* .deb 包,对我和recently blogged about one way to dramatically cut test times down 更方便。

    Michael 在他的存储库中有超过 1000 个,您也可以通过 PPA 构建自己的存储库。如果时间允许,我可能会写另一篇博文详细说明...

    【讨论】:

    • 感谢您的信息。我也可以切换回旧的 r-travis 设置。我在那里也遇到了同样的错误,但也许安装预构建的二进制文件可以解决它。 r-cran-*.deb 上是否有可用的软件包列表?
    • 启动板上的搜索非常基础。我有一个超级基本的包RcppAPT,你可以从R中使用如果你在一个合适的Ubuntu系统上并且已经连接到那个repo。
    猜你喜欢
    • 1970-01-01
    • 2021-11-07
    • 1970-01-01
    • 2012-12-14
    • 1970-01-01
    • 2013-07-21
    • 1970-01-01
    • 2021-09-13
    • 1970-01-01
    相关资源
    最近更新 更多