簡體   English   中英

驗證安裝在docker容器中的R軟件包

[英]Verify R packages installed into docker container

有沒有人有任何最佳實踐來驗證R包是否已安裝到docker容器中? 我想設置我的容器來運行CI服務,並驗證我的軟件包是否已安裝,但是因為我一直在本地構建它,所以日志似乎很難確定安裝了什么軟件包,什么沒有。 如果有CI服務為我做這件事,或者使用簡單的批處理腳本來驗證軟件包是否已安裝,那將是件好事。

下面是我目前的dockerfile:

FROM rocker/tidyverse:latest
RUN mkdir -p $HOME/.R
COPY R/Makevars /root/.R/Makevars

RUN apt-get update -qq \
    && apt-get -y --no-install-recommends install \
    liblzma-dev \
    libbz2-dev \
    ed \
    clang  \
    ccache \
    default-jdk \
    default-jre \
    && R CMD javareconf \
    && install2.r --error \
        ggstance ggrepel \
        rstan shinystan rstanarm \
        ###My pkgs
        tidytext janitor corrr officer devtools pacman
        tidyquant timetk tibbletime sweep broom prophet \
        forecast prophet lime sparklyr rsparkling \
        formattable httr rvest xml2 jsonlite \
        textclean ggthemes naniar \
    && Rscript -e 'devtools::install_github(c("hadley/multidplyr","jeremystan/tidyjson","ropenscilabs/skimr"))' \
    && rm -rf /tmp/downloaded_packages/ /tmp/*.rds \
    && rm -rf /var/lib/apt/lists/*

將其保存為類似package_check.R東西,然后有一個Docker行通過Rscript運行它:

c("tidytext", "janitor", "corrr", "officer", "devtools", "pacman", "tidyquant", 
  "timetk", "tibbletime", "sweep", "broom", "prophet", "forecast", "prophet", 
  "lime", "sparklyr", "rsparkling", "formattable", "httr", "rvest", "xml2", 
  "jsonlite", "textclean", "ggthemes", "naniar") -> chk_pkgs

suppressPackageStartupMessages(
  sapply(chk_pkgs, require, character.only=TRUE, quietly=FALSE, warn.conflicts=FALSE)
) -> ret

missing_pkgs <- sort(names(which(ret == FALSE)))

if (length(missing_pkgs) > 0) {
  warning("The following packages are not installed: %s", 
          paste0(sprintf("  - %s", missing_pkgs), collapse="\n"))
}

quit(save=FALSE, status=length(names) == 0, runLast = FALSE)

這將使缺少的列表丟失包錯誤並退出具有非零退出狀態的腳本。

我沒有找到你想要安裝的軟件包,我使用以下行來停止構建Docker鏡像:

RUN R -e 'stopifnot("devtools" %in% installed.packages()[,"Package"])'

確保將devtools替換為您要安裝的軟件包的名稱。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM