当 renv 是 R 包的一部分时,为什么 cirlceCI 无法成功构建?
Why does cirlceCI does not build successfully when renv is part of a R package?
我正在尝试为 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
将 项目与用户/站点库隔离开来,因此您在前面的步骤中安装的包在项目中是不可见的。此行为是有意的,并确保不同的项目库与用户/站点库以及其他项目库中的更改隔离开来。
以下其中一项应该有所帮助:
如果您的 renv.lock
是最新的,请在尝试使用 devtools
或其他软件包之前致电 renv::restore()
;
允许renv
查看用户库,例如环境变量 RENV_CONFIG_USER_LIBRARY = TRUE
.
如果您还没有阅读 https://rstudio.github.io/renv/articles/renv.html and https://rstudio.github.io/renv/articles/ci.html,我建议您阅读。
我正在尝试为 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
将 项目与用户/站点库隔离开来,因此您在前面的步骤中安装的包在项目中是不可见的。此行为是有意的,并确保不同的项目库与用户/站点库以及其他项目库中的更改隔离开来。
以下其中一项应该有所帮助:
如果您的
renv.lock
是最新的,请在尝试使用devtools
或其他软件包之前致电renv::restore()
;允许
renv
查看用户库,例如环境变量RENV_CONFIG_USER_LIBRARY = TRUE
.
如果您还没有阅读 https://rstudio.github.io/renv/articles/renv.html and https://rstudio.github.io/renv/articles/ci.html,我建议您阅读。