Windows下pkgbuild构建二进制R包:忽略规则失效与vignette缺失求助
解决Windows下构建含Vignette的R二进制包问题
一、修复.Rbuildignore未生效的问题
- 检查语法规则:
.Rbuildignore用正则表达式匹配路径,不是简单文件名。比如忽略data-raw文件夹要写^data-raw$,忽略.gitignore要写^\\.gitignore$(注意转义点号)。 - 确认文件位置和名称:
.Rbuildignore必须放在包根目录,文件名不能写错(开头的点不能丢)。 - 验证规则有效性:运行
devtools::check_build_ignore(),查看输出的被忽略文件列表,确认目标文件/文件夹在其中。 - 清理旧构建产物:删除包根目录下的
src/*.o、src/*.dll以及vignettes/*.html等旧文件,避免残留文件被误打包。
二、确保Vignette被包含进二进制包
- 确认vignette基础配置:
vignettes文件夹下的.Rmd文件,YAML头要包含output: rmarkdown::html_vignette(或其他R支持的vignette输出格式)。- 包的
DESCRIPTION文件必须添加:VignetteBuilder: knitr Suggests: knitr, rmarkdown
- 不要单独用
devtools::build_vignette()(单数),改用devtools::build_vignettes()(复数),它会把生成的HTML文件自动放到inst/doc目录——这是R包存放vignette的标准位置,二进制包会自动识别并包含这里的内容。 - 检查
.Rbuildignore:绝对不能忽略vignettes/或inst/doc/目录,否则vignette会被排除。
三、完整构建流程(Windows环境)
- 确认
DESCRIPTION配置无误,添加好Vignette相关字段。 - 调整
.Rbuildignore规则,用devtools::check_build_ignore()验证,示例规则:^\\.git$ ^\\.gitignore$ ^data-raw$ ^README\\.md$ - 清理旧产物:
devtools::clean() - 构建二进制包:
可以分两步操作,更稳妥:
或者一步到位,让构建工具自动处理:# 先编译vignette到inst/doc devtools::build_vignettes() # 再构建二进制包 pkgbuild::build(binary = TRUE, vignettes = TRUE)
加pkgbuild::build(binary = TRUE, vignettes = TRUE, clean = TRUE)clean = TRUE会在构建前自动清理旧文件,避免干扰。
内容的提问来源于stack exchange,提问作者Stéphane Laurent
相关产品推荐
相关产品推荐

