You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

更新CRAN包至0.2.1后vignette构建报错,求解决方案

解决CRAN提交时Vignette依赖utf8的问题

我来帮你梳理下这个问题的解决思路——核心就是CRAN对包依赖的严格规则,和你vignette编译时需要的间接依赖没匹配上。咱们一步步来搞定:

1. 把utf8放到正确的依赖位置

打开你的包的DESCRIPTION文件,别把utf8加到Imports里(那是包核心功能必须的依赖),而是加到Suggests字段里,因为它只是编译vignette需要的,不是你的包本身运行必须的。示例如下:

Suggests:
    forecast,
    tsibble,
    utf8,
    knitr,
    rmarkdown

这样CRAN就知道这个包是给文档编译用的,不会判定你滥加依赖。

2. 在vignette里优雅加载utf8

别直接写library(utf8),换成条件检查的方式,既满足编译需求,又符合CRAN的检查逻辑:

# 编译vignette前检查utf8是否安装,没装就提示
if (!requireNamespace("utf8", quietly = TRUE)) {
  stop("Package 'utf8' is required to build this vignette. Please install it.", call. = FALSE)
}

要是你确定CRAN的编译环境会自动安装Suggests里的包,也可以保留library(utf8),但必须确保它已经在Suggests里声明了,这样devtools检查时就不会再弹出未声明依赖的NOTE。

3. 处理本地检查的_SUGGESTS_报错

如果你本地跑devtools::check(cran=TRUE)还报错,大概率是你本地没装全Suggests里的包。要么先手动装一遍:

install.packages(c("forecast", "tsibble", "utf8", "knitr", "rmarkdown"))

要么临时设置环境变量跳过强制检查(只用来本地测试,提交CRAN别这么干):

Sys.setenv("_R_CHECK_FORCE_SUGGESTS_" = FALSE)
devtools::check(cran=TRUE)

CRAN自己的检查系统会自动处理Suggests包的安装,不用你操心。

4. 最后验证一下

改完之后重新跑devtools::check_rhub(),应该就能正常编译vignette了,也不会再出现依赖相关的ERROR或NOTE。

为啥会出这个问题?

其实是因为tsibble把utf8列为了Suggests依赖,不是强制导入的。你用generate_ts输出tsibble格式时,触发了需要utf8的功能,但检查环境默认不会安装Suggests层级的依赖,所以得你自己显式声明出来。

内容的提问来源于stack exchange,提问作者user13971133

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.09 12:12:33