如何使用R devtools添加本地包依赖及解决检查报错问题
解决R devtools添加本地包依赖及check识别问题
一、use_dev_package()的remote路径正确填写方式
- 路径必须指向本地依赖包的根目录(即包含DESCRIPTION、R/、man/等核心文件夹的目录),不能是R子目录或tar.gz构建文件。
- 支持两种路径形式:
- 绝对路径:直接填写完整路径,例如依赖包在
/home/user/local-packages/foopack,执行命令:usethis::use_dev_package("foopack", type = "Imports", remote = "local::/home/user/local-packages/foopack") - 相对路径:以主包项目根目录为基准,例如依赖包和主包同级(主包在
my-main-pkg,依赖在foopack),执行命令:usethis::use_dev_package("foopack", type = "Imports", remote = "local::../foopack")
- 绝对路径:直接填写完整路径,例如依赖包在
- 执行后,主包的DESCRIPTION文件会自动添加两行配置:
Imports: foopack Remotes: local::../foopack
二、让devtools::check()识别本地依赖(含vignette场景)
基础处理步骤
- 先确保本地依赖包可被R识别:
- 在依赖包目录执行
devtools::install()完成安装,或用devtools::load_all()加载开发版本到当前会话。
- 在依赖包目录执行
- 执行主包check时,添加
cran = FALSE参数跳过CRAN严格检查规则:devtools::check(cran = FALSE)
带vignette的特殊处理
主包包含vignette时,编译过程会启动独立R会话,默认不会识别本地依赖,可按以下方式解决:
- 先在本地依赖包目录预编译vignette:
devtools::build_vignettes() - 临时将本地依赖包目录加入R的库路径后再执行check:
withr::with_libpaths(c("../foopack", .libPaths()), { devtools::check(cran = FALSE, args = "--with-vignettes") }) - 若仍报“Package required but not available”,先手动安装本地依赖包,再执行主包check。
补充:use_dev_package()报错的解决逻辑
你提到的devtools::check()后报错消失,本质是check过程中会自动加载或安装依赖包,让R能识别到foopack。更稳妥的流程是先确保本地依赖包存在并可被R找到,再调用use_dev_package()添加依赖。
内容的提问来源于stack exchange,提问作者antonio
相关产品推荐
相关产品推荐

