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

为什么包含renv的R包在CircleCI中构建失败并提示devtools缺失?

问题原因
  • renv在项目中激活后,默认会启用包隔离机制,仅读取项目renv/library路径下的R包,不会加载镜像中全局安装的系统包
  • 你的自定义镜像将devtools安装在R的全局系统库中,renv激活后包搜索路径默认不包含全局库路径,因此调用devtools::install_deps时会触发找不到包的错误
  • 无renv配置时R会默认读取全局系统库,因此运行流程正常。
解决方案

你可以根据自己的使用场景选择以下任意一种方案:

方案1:临时禁用renv激活,使用全局devtools安装依赖

适合不需要在CI的依赖安装步骤使用renv环境的场景,仅需修改CI配置中依赖安装的命令,临时关闭renv自动激活即可:

version: 2
jobs:
  build:
    docker:
      - image: my_random_image
    steps:
      - checkout
      - run:
          name: Install package dependencies
          command: R -e "Sys.setenv(RENV_ACTIVATE_PROJECT = FALSE); devtools::install_deps(dep = TRUE)"
      - run:
          name: Build package
          command: R CMD build .
      - run:
          name: Check package
          command: R CMD check *tar.gz

方案2:将devtools加入项目renv依赖

适合需要在CI全流程使用renv环境的场景,在本地开发环境的项目目录下执行以下命令,将devtools加入renv锁文件后提交代码即可:

renv::install("devtools")
renv::snapshot()

提交更新后的renv.lock文件到仓库后,CI流程中renv激活后就可以直接读取到项目库中的devtools。

方案3:调整renv配置允许访问全局系统库

不需要修改锁文件,仅需在依赖安装步骤前添加renv配置项,允许renv搜索全局系统库即可:

options(renv.config.system.library = TRUE)
devtools::install_deps(dep = TRUE)

对应修改后的CI命令为:

command: R -e "options(renv.config.system.library = TRUE); devtools::install_deps(dep = TRUE)"

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 22:54:00