R找不到travis安装的包
R can't find packages installed by travis
我们正在尝试向 caret package 添加一些单元测试,这些单元测试通过 travis 获得 运行,但在 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 build for r 不那么冗长?默认情况下,它们似乎打印了太多信息(例如,它回显了测试和手册中的所有代码 运行,甚至是没有错误的代码)。
您可以克隆 r-travis 存储库并从您的副本中获取源代码。这样你就可以让它不那么冗长了。
至于 "packages not found":不知道。但是 Travis 实例是一个香草 Ubuntu 安装,所以你 可以 通过回显到合适的 ~/.Rprofile
等页来控制事情。我找到了 old r-travis 设置对我和 recently blogged about one way to dramatically cut test times down 更方便,更多地依赖预构建的 r-cran-*
.deb 包。
Michael 在他的回购协议中有超过 1000 个,您也可以通过 PPA 构建自己的。如果时间允许,我可能会写另一篇博客 post 详细说明...
在 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
找错了地方。
原则上,我们可以为 R CMD check
使用 --library
参数来指向正确的位置,但是当您使用 --as-cran
时,--library
默认为 /usr/lib/R/library
.
最简单的解决方案可能是将所有包(特别是 "additional" 包 ROSE
和 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
到 .travis.yml
文件的 before_install
部分。
我们正在尝试向 caret package 添加一些单元测试,这些单元测试通过 travis 获得 运行,但在 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 build for r 不那么冗长?默认情况下,它们似乎打印了太多信息(例如,它回显了测试和手册中的所有代码 运行,甚至是没有错误的代码)。
您可以克隆 r-travis 存储库并从您的副本中获取源代码。这样你就可以让它不那么冗长了。
至于 "packages not found":不知道。但是 Travis 实例是一个香草 Ubuntu 安装,所以你 可以 通过回显到合适的 ~/.Rprofile
等页来控制事情。我找到了 old r-travis 设置对我和 recently blogged about one way to dramatically cut test times down 更方便,更多地依赖预构建的 r-cran-*
.deb 包。
Michael 在他的回购协议中有超过 1000 个,您也可以通过 PPA 构建自己的。如果时间允许,我可能会写另一篇博客 post 详细说明...
在 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
找错了地方。
原则上,我们可以为 R CMD check
使用 --library
参数来指向正确的位置,但是当您使用 --as-cran
时,--library
默认为 /usr/lib/R/library
.
最简单的解决方案可能是将所有包(特别是 "additional" 包 ROSE
和 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
到 .travis.yml
文件的 before_install
部分。