当renv是R包的一部分时,为什么cirlceCI不能成功构建



我正在尝试为R包设置CI。在这方面,我正在考虑circleCI,它已经与以前的R项目进行了合作。然而,这一次,我得到了以下错误:

Downloading renv 0.14.0 ... OK (downloaded source)
Installing renv 0.14.0 ... Done!
Successfully installed and loaded renv 0.14.0.
Project '~/main' loaded. [renv 0.14.0]
devtools::install_deps(dependencies = TRUE)
Error in loadNamespace(x) : there is no package called ‘devtools’
Calls: loadNamespace -> withRestarts -> withOneRestart -> doWithOneRestart
Execution halted

我的.circleci/config.yml看起来与相似

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

my_random_image如下所示:

FROM r-base:4.1.2
RUN apt-get update  
&& apt-get install git libssl-dev ssh texlive-latex-base texlive-fonts-recommended 
libcurl4-openssl-dev libxml2-dev -y 
&& rm -rf /var/lib/apt/lists/*
RUN R -e "install.packages(c('devtools', 'roxygen2'), repos='http://cran.us.r- project.org')"

就我所见,这是相当标准的东西。只有当renv是我的R包的一部分时,才会发生错误。否则circleCI不会抱怨,并按预期运行,不会出现任何错误。我想在我的R项目中保留renv,因此很难理解这个问题和解决方案。感谢您的帮助!!

这里的问题很可能是您的运行阶段,这里:

- run:
name: Install package dependencies
command: R -e "devtools::install_deps(dep = TRUE)"

将软件包安装到默认的用户/站点库中,但当R在项目的工作目录中启动时:

Downloading renv 0.14.0 ... OK (downloaded source)
Installing renv 0.14.0 ... Done!
Successfully installed and loaded renv 0.14.0.
Project '~/main' loaded. [renv 0.14.0]

renv自动加载器正在自动下载renv并激活renv项目库。

默认情况下,renv项目与用户/站点库隔离,因此在项目中不可见在早期步骤中安装的包。这种行为是有意的,可以确保不同的项目库与用户/站点库以及其他项目库中的更改隔离开来。

以下其中一项应该会有所帮助:

  1. 如果您的renv.lock是最新的,请在尝试使用devtools或其他软件包之前致电renv::restore()

  2. 允许renv查看用户库,例如使用环境变量RENV_CONFIG_USER_LIBRARY = TRUE

我建议阅读https://rstudio.github.io/renv/articles/renv.html和https://rstudio.github.io/renv/articles/ci.html如果你还没有。

最新更新