es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Por qué CircleCI no construye correctamente cuando renv es parte de un paquete de R?

Estoy tratando de configurar una Integración Continua (CI) para un paquete R. En este sentido, estoy considerando circleCI, que ha funcionado bien en proyectos R anteriores. Sin embargo, esta vez, obtengo el siguiente error:

 Descargando renv 0.14.0 ... OK (fuente descargada)
 Instalando renv 0.14.0 ... ¡Hecho!
 renv 0.14.0 instalado y cargado correctamente.
 Proyecto '~/main' cargado. [renv 0.14.0]
 devtools::install_deps(dependencies = TRUE)
 Error in loadNamespace(x) : no se encontró el paquete ‘devtools’
 Llamadas: loadNamespace -> withRestarts -> withOneRestart -> doWithOneRestart
 Ejecución interrumpida

Mi .circleci/config.yml se ve similar a este:


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

y mi imagen aleatoria se ve así:

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')"

Por lo tanto, es algo estándar, según lo que puedo ver. El error solo ocurre si renv forma parte de mi paquete R. De lo contrario, CircleCI no se queja y se ejecuta como se espera sin errores. Me gustaría mantener renv en mi proyecto R y, por lo tanto, luchar para entender el problema y la solución para eso. ¡¡aprecio cualquier ayuda!!

Tags:  , ,

Answer

  1. Avatar for davy.ai

    El mensaje de error sugiere que falta el paquete ‘devtools’. Esto se puede solucionar instalando el paquete ‘devtools’ antes de ejecutar ‘devtools::install_deps’.

    versión: 2
    trabajos:
      build:
        docker:
          - imagen: mi_imagen_aleatoria
        steps:
          - checkout
          - run:
              name: Instalar devtools y dependencias del paquete
              command: |
                R -e "install.packages(c('devtools', 'roxygen2'), repos='http://cran.us.r-project.org')"
                R -e "devtools::install_deps(dep = TRUE)"
          - run:
              name: Construir el paquete
              command: R CMD build .
          - run:
              name: Verificar el paquete
              command: R CMD check *tar.gz
    

    Como alternativa, puede agregar la instalación de ‘devtools’ al Dockerfile de la siguiente manera:

    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')"
    
    RUN R -e "install.packages('renv', repos='http://cran.us.r-project.org')"
    
    CMD ["R"]
    

    Luego, actualice el archivo config.yml de la siguiente manera:

    version: 2
    trabajos:
      build:
        docker:
          - imagen: mi_imagen_aleatoria
        steps:
          - checkout
          - run:
              name: Instalar dependencias del paquete
              command: R -e "renv::consent(provided=TRUE); renv::restore()"
          - run:
              name: Construir el paquete
              command: R CMD build .
          - run:
              name: Verificar el paquete
              command: R CMD check *tar.gz
    

    Esto asume que ya ha creado el archivo ‘renv.lock’ en su proyecto.

    Con suerte, esto ayuda a resolver el problema.

Comments are closed.