r - devtools::test() 失败:依赖包 X 不可用
问题描述
相关问题:
我有两个自制包,A和B。B的某些功能依赖于A ,并且在其文件中包含 A,如下所示:DESCRIPTION
Depends: A
我有使用testthat编写的单元测试。加载B通常可以正常工作,并且手动运行测试(将代码作为一个块运行)可以正常工作。但是,尝试使用自动化测试devtools::test()
失败:
>devtools::test()
Loading B
Error in (function (dep_name, dep_ver = NA, dep_compare = NA) :
Dependency package A not available.
我不知道如何开始调试它,因为它在自己的环境等中运行,所以我什至无法打印任何东西。我怀疑有.libPaths()
问题,但无法确认。
我不知道如何最小化重现问题,并且我无法共享代码,因为它是专有的。
traceback()
称呼:
> traceback()
6: stop("Dependency package ", dep_name, " not available.")
5: (function (dep_name, dep_ver = NA, dep_compare = NA)
{
if (!requireNamespace(dep_name, quietly = TRUE)) {
stop("Dependency package ", dep_name, " not available.")
}
if (xor(is.na(dep_ver), is.na(dep_compare))) {
stop("dep_ver and dep_compare must be both NA or both non-NA")
}
else if (!is.na(dep_ver) && !is.na(dep_compare)) {
compare <- match.fun(dep_compare)
if (!compare(as.numeric_version(getNamespaceVersion(dep_name)),
as.numeric_version(dep_ver))) {
warning("Need ", dep_name, " ", dep_compare, " ",
dep_ver, " but loaded version is ", getNamespaceVersion(dep_name))
}
}
return(TRUE)
})(dots[[1L]][[5L]], dots[[2L]][[5L]], dots[[3L]][[5L]])
4: mapply(check_dep_version, deps$name, deps$version, deps$compare)
3: load_depends(pkg)
2: load_all(pkg, quiet = TRUE)
1: devtools::test()
sessionInfo()
:
> sessionInfo()
R version 3.4.4 (2018-03-15)
Platform: x86_64-pc-linux-gnu (64-bit)
Running under: Linux Mint 18.2
Matrix products: default
BLAS: /usr/lib/libblas/libblas.so.3.6.0
LAPACK: /usr/lib/lapack/liblapack.so.3.6.0
locale:
[1] LC_CTYPE=en_US.UTF-8 LC_NUMERIC=C LC_TIME=en_US.UTF-8 LC_COLLATE=en_US.UTF-8 LC_MONETARY=en_US.UTF-8
[6] LC_MESSAGES=en_US.UTF-8 LC_PAPER=en_US.UTF-8 LC_NAME=C LC_ADDRESS=C LC_TELEPHONE=C
[11] LC_MEASUREMENT=en_US.UTF-8 LC_IDENTIFICATION=C
attached base packages:
[1] stats graphics grDevices utils datasets methods base
loaded via a namespace (and not attached):
[1] Rcpp_0.12.17 bindr_0.1.1 xml2_1.2.0
[4] magrittr_1.5 roxygen2_6.0.1 devtools_1.13.6
[7] tidyselect_0.2.4 R6_2.2.2 rlang_0.2.1
[10] stringr_1.3.1 plyr_1.8.4 dplyr_0.7.6
[13] tools_3.4.4 B_1.0 withr_2.1.2
[16] commonmark_1.5 digest_0.6.15 assertthat_0.2.0
[19] tibble_1.4.2 bindrcpp_0.2.2 purrr_0.2.5
[22] testthat_2.0.0 memoise_1.1.0 glue_1.3.0
[25] stringi_1.2.3 compiler_3.4.4 pillar_1.2.3
[28] pkgconfig_2.0.1
解决方案
debugonce()
可以使用devtools::test()
函数来调试情况。这允许对测试环境进行交互式调试。
调用installed.packages()
显示没有问题,即软件包A和B安装在正确的路径中。
使用debugonce()
,我追踪devtools::test()
到devtools:::load_depends()
失败并devtools:::check_dep_version()
出现requireNamespace()
以下错误:
Loading required namespace: A
Failed with error: ‘object 'mutate' not found whilst loading namespace 'A'’
显然,某种涉及mutate()
方法的隐藏命名空间错误。问题是quiet=TRUE
torequireNamespace()
是打开的,并且不可更改,因此错误消息不会到达用户,将他们发送到错误的路径。
因此答案结果与我之前回答的上一个问题相似,只是没有意识到这种联系。
推荐阅读
- asp.net - ASP.NET jQuery 错误:未知的 Web 方法和无法使用 Visual Studio 2019 调试 aspx Web 表单应用程序
- magento2 - 如何在使用 API 下订单之前更改货币代码
- reactjs - 如何在 Polaris DataTable 中显示来自 Graphiql 对象的订单
- c++ - 在双向链表的末尾插入
- azure-cosmosdb - Gremlin DFS/BFS 搜索同时避免循环
- python-3.x - PyMC3 的哪个 Theano?
- c++ - 谷歌基准框架不优化
- r - R用自定义系数绘制图表
- typescript - 用玩笑酶测试 axios 发布请求
- r - 如何将 summary() 与 lqmm 和公式对象一起使用