À la découverte de RStudio Package Manager

À la découverte de RStudio Package Manager

Gérer les packages en production peut vite être un casse-tête : il faut jongler entre les versions, les packages internes, les mises à jour CRAN, Bioconductor, les sources GitHub…. Découvrons RStudio Package Manager, l’un des outils disponibles qui vous aide à gérer cela.

What is love RSPM (Baby don’t hurt me, no more 🎶)

RStudio Package Manager (ou RSPM en abrégé) est une solution conçue pour vous aider à gérer l’installation des packages dans votre organisation. Que vous ayez besoin de mettre à disposition de votre équipe l’ensemble du CRAN par le biais d’un proxy, d’une partie du CRAN, de packages GitHub, de packages internes, etc, vous pouvez utiliser RSPM comme point central pour gérer cela.

Il peut également être utile si vous disposez d’une connexion réseau gérée via un proxy, car RPSM peut être configuré pour fonctionner avec un proxy.

Installer RSPM

Vous pouvez tester RSPM pendant 45 jours en téléchargeant sur RStudio Package Manager. L’installation est possible sur Red Hat, CentOS, SUSE et Ubuntu (Voir ici pour les specs précises).

Une fois RSPM installé et lancé, le port par défaut est 4242, vous pouvez y accéder avec http://<adress-of-server>:4242/

 

Dans les entrailles de RSPM

RSPM est composé de sources et de repos.

Repos

Un repo est une collection de package disponibles, qui sont rassemblés à partir d’une ou plusieurs sources (voir ci-dessous pour ce que sont les sources). En gros, cela permet de créer une structure RAN. (voir Dockeriser et déployer son propre R Archive repo pour plus d’infos sur la structure d’un repo).

Par example, sur ma machine, si j’ouvre http://192.168.0.10:4242/thinkr/latest/src/contrib/PACKAGES, j’aurais :

Je peux également avoir d’autres repos, avec d’autres packages :

La source de chaque package est disponible sur http://<server>/<repo>/latest/src/contrib/<my-package> — l’adresse étant disponible sur la page de chaque package :

Les archives sont sur http://<server>/<repo>/latest/src/contrib/archive/package/<package>_<version>.tar.gz.

Sources

Comme nous l’avons déjà dit, un repo est construit sur une ou plusieurs sources. En quelques mots, une source est « l’endroit où aller chercher les packages « . C’est ce qui est utilisé par un repo pour définir quels packages sont disponibles au téléchargement. Il y a 3 types de sources :

  • L’ensemble du CRAN, pointant vers le service CRAN de RStudio.
  • Liste choisi dans les packages du CRAN ; c’est-à-dire une sélection (voir ci-dessous).
  • Sources locales :packages internes

À propos des « curated CRAN sources »

Dans un contexte d’entreprise, il n’est pas toujours facile de donner accès à l’ensemble du CRAN, et ce pour plein de raisons (mais surtout pour des raisons de sécurité, car l’IT veut contrôler ce qu’un utilisateur installe sur une machine).

RStudio Package Manager vous permet de faire exactement cela. Vous pouvez sélectionner un sous-ensemble de packages du CRAN qui seront disponibles.

Et la bonne nouvelle, c’est que vous pouvez retarder le téléchargement des packages, ce qui vous permet d’attendre une validation :

  • Vous pouvez produire un output des packages que vous voulez mettre à disposition. Cette sortie contient les informations sur les packages et toutes leurs dépendances, avec des informations sur la compilation ou la licence.

  • Une fois que vous avez ce sous-ensemble, vous pouvez mettre l’ajout en attente, c’est-à-dire que vous enverrez la sortie de la commande précédente (disponible aussi en csv, pas seulement en sortie console), à votre manager et/ou département IT et demander la validation. Supposons que vous le faites le 1er septembre. La bureaucratie étant ce qu’elle est, vous pourriez obtenir une validation 15 jours plus tard. La mauvaise nouvelle est que, l’open source étant ce qu’il est, les packages peuvent avoir été mis à jour entre-temps. Eh bien, la bonne nouvelle est que si vous téléchargez maintenant la sélection que vous avez mise en attente, elle installera le package dans l’état exact où il se trouvait au moment où vous avez créé la liste. Si à l’avenir il vous est demandé d’ajouter un nouveau package, il sera également ajouté comme la version qu’il était le 1er septembre.

Voici un exemple d’un repo créé avec la commande précédente – comme vous pouvez le voir, j’ai maintenant un repo « curated », qui ne contient que les packages nécessaires pour attempt, dplyr, fcuk et purrr :

Et oui, bien sûr, ce repo peut toujours être mis à jour à la date la plus récente.

Stats sur l’usage

Le RSPM fournit également un moyen pratique de jeter un coup d’œil aux téléchargements de packages : chaque fois qu’un 📦 est installé sur une machine, il est suivi à l’intérieur du panneau de statistiques :

Et maintenant ?

Bien, et maintenant, comment mes utilisateurs peuvent-ils installer ces packages ?

À l’anciennne

install.packages(
  "pkgtest", 
  repos = "http://<server>/<repo>/latest", 
  type = "source"
)

Avec {withr}

Changeons temporairement le repo :

withr::with_options(
  list(repos = "http://<server>/<repo>/latest"), 
  install.packages("pkgtest")
)

Une fonction

On peut créer une fonction (et donc un package) qui gère l’installation :

install_packages <- function(package){
  install.packages(
  package, 
  repos = "http://<server>/<repo>/latest", 
  type = "source"
)
}
install_packages("attempt")

Settings globaux

options(repos = "http://<server>/<repo>/latest")
install.packages("pkgtest")

(À mettre dans le  ~/.Rprofile).

Sur la prochaine version de RStudio

Dans la prochaine version de RStudio (1.2 et +) que vous pouvez dès aujourd’hui télécharger dans les dailies, on change cette option dans le Global Options:

Je veux le faire!

Envie d’apprendre à installer et orchestrer RSPM ? On peut vous aider 😉