R包healthyverse检查报错:utils::packageVersion(x)找不到tidyAML
解决devtools::check时.onAttach中找不到tidyAML的问题
核心原因
devtools::check会在隔离测试环境中运行,和本地交互环境的依赖加载逻辑、顺序不同。即使本地能正常调用utils::packageVersion("tidyAML"),隔离环境可能因为依赖声明不完整、加载时机问题,导致.onAttach执行时tidyAML未被正确识别。
具体解决方案
1. 修正DESCRIPTION的依赖声明
确保tidyAML被正确添加到Imports字段(而非仅Suggests),因为你的包在.onAttach中直接调用了tidyAML相关逻辑:
Imports: tidyAML (>= 0.1.0), # 替换为实际依赖的最低版本号 utils
若之前放在Suggests,CRAN测试环境不会默认安装该包,自然会触发找不到的错误。
2. 调整.onAttach的容错逻辑
不要直接调用utils::packageVersion("tidyAML"),先通过requireNamespace验证包是否可访问:
.onAttach <- function(libname, pkgname) { if (requireNamespace("tidyAML", quietly = TRUE)) { tidy_version <- utils::packageVersion("tidyAML") # 你的原有逻辑,比如版本检查、欢迎信息等 } else { warning("tidyAML包未安装,部分功能无法使用", call. = FALSE) } }
3. 重置devtools测试环境
清理本地缓存并重新安装所有依赖后再测试:
devtools::clean_dll() devtools::install_deps(dependencies = TRUE) devtools::check()
4. 强制测试环境安装tidyAML
如果隔离环境仍未正确安装tidyAML,可手动指定在测试环境中安装:
withr::with_libpaths(new = tempdir(), { install.packages("tidyAML", repos = "https://cran.rstudio.com/") devtools::check() })
内容的提问来源于stack exchange,提问作者MCP_infiltrator
相关产品推荐
相关产品推荐

