2017-10-24 4 views
1

Gibt es Best Practices für die Überprüfung, ob R-Pakete in einem Andock-Container installiert sind? Ich möchte meinen Container so einrichten, dass er auf einem CI-Dienst ausgeführt wird, und überprüfen, ob mein Paket installiert ist. Da ich es jedoch lokal erstellt habe, scheinen die Protokolle sehr schwer zu ermitteln, welche Pakete installiert wurden und welche nicht. Es wäre schön, wenn ein CI-Dienst dies für mich erledigt oder ein einfaches Batch-Skript verwendet, um zu überprüfen, ob die Pakete installiert sind.Überprüfen Sie, ob R-Pakete im Andock-Container installiert sind

Im Folgenden finden Sie meine aktuellen 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/* 

Antwort

1

dies wie package_check.R etwas speichern und dann eine Docker Linie haben, die es über Rscript läuft:

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) 

, die Ihnen ein fehlendes Paket Fehler mit der fehlenden Liste und beenden Sie das Skript mit einem Exit-Status ungleich Null.

+0

Um dies wirklich dynamisch zu machen, sollte ich ein RScript verwenden, um alle meine Pakete zu installieren, und diesen Wert einfach in chk_pkgs eingeben? Wie die Verwendung von Bash, um den Vektor von Paketen, die in install.packages – petergensler

+0

eingegeben wurden, grundsätzlich herauszunehmen. Wenn Sie bereit sind, diese Route zu gehen (es braucht Zeit, um dies zu tun), können Sie einen dynamischen Installer & Verifier erstellen. Du machst bereits eine tolle Sache, indem du von einem Basis-Rocker-Image ausgehst, das wäre nur ein Sahnehäubchen. – hrbrmstr

+0

Dies ist mein "Kern" -Dilemma: Wenn ich mein Docker-Image lokal erstelle, ist das Build-Protokoll sehr schwer zu interpretieren, wenn ein Paket mit seinen Deps fertig ist. Wie in Teil meines buildlog hat: * DONE (rstan) Die heruntergeladenen Quellpakete sind in \t '/ tmp/downloaded_packages' auch die Abhängigkeiten 'miniUI' Installation 'PKI', 'RCurl', 'RJSONIO', "Packrat", "Übersprechen", "Bayesplot", "Colourpicker", "DT", "dygraphs", "GTools", "RSconnect", "shinyjs", "shinythemes", "threejs", "xts". Man könnte also annehmen, dass es sich um Depends von ristan handelt, sondern um Depots, die auf anderen pks in meinem Vektor basieren. – petergensler

Verwandte Themen