Supposons que je doive installer un certain nombre de packages sur une machine (Linux) qui n'a pas de connexion Internet. Disons que j'ai téléchargé une copie de cran et l'ai gravée sur un DVD que j'apporte à l'emplacement hors ligne:
wget ftp://cran.r-project.org/pub/R/src/contrib/*.tar.gz
Je peux même ajouter un fichier PACKAGES qui contient un aperçu de tous les packages source et de leurs dépendances:
library(tools)
write_PACKAGES()
Comment pourrais-je utiliser ceci hors ligne pour installer un package source de telle manière que les dépendances soient également résolues et installées à partir des fichiers locaux? Par exemple, quelqu'un veut installer le package ggplot2, qui a une structure de dépendance assez profonde. Supposons que le package source de ggplot2 et toutes ses dépendances sont disponibles en tant que packages source dans le répertoire de travail actuel. Si je fais:
install.packages("ggplot2_0.9.1.tar.gz", repos=NULL)
Cela entraîne une erreur, car les dépendances ne sont pas du tout résolues. Alternativement:
install.packages(list.files(pattern="*.tar.gz"), repos=NULL)
Cependant, cela ignore également la structure de dépendance et essaie d'installer les packages par ordre alphabétique, ce qui échouera également.
J'ai examiné available.packages
et contrib.url
mais je ne trouve tout simplement pas un exemple d'installation d'un paquet source à partir d'un fichier local, y compris ses dépendances.
La bonne réponse a été donnée par Joshua Ulrich dans le commentaire sur la question:
La clé préfixe l'argument à repos
ou contriburl
avec file://
. Donc, dans les systèmes Unixy, on pourrait faire:
install.packages("ggplot2", contriburl="file:///path/to/packages/")
Cela suppose que tous les packages source requis, ainsi qu'un fichier d'index PACKAGES sont disponibles dans /path/to/packages
. Si aucun fichier PACKAGES n'est présent, il doit d'abord être généré en utilisant:
library(tools)
write_PACKAGES("/path/to/packages/")
qui générera un index de tous les paquets source trouvés dans ce répertoire. Notez que dans l'exemple, il y a 3 barres obliques derrière le file:
préfixe. La troisième barre oblique indique un chemin d'accès par rapport à la racine du système de fichiers.
La différence entre l'argument repos
et contriburl
est que repos
ajoutera un autre /src/contrib
vers le chemin spécifié, car c'est généralement là que les packages source se trouvent sur un miroir de référentiel CRAN officiel.
En référence à la réponse ci-dessus, si l'installation est sous Windows, alors write_PACKAGES () génère deux fichiers: PACKAGES et PACKAGES.gz sous le répertoire '/ path/to/packages /' où tous les fichiers Zip sont placés. Le fichier PACKAGES.gz doit être supprimé avant que la fonction install.packages () ne puisse lire correctement le fichier PACKAGES seul, sinon l'erreur "Impossible d'ouvrir le fichier compressé" apparaît.
J'ai eu les mêmes problèmes lors de l'installation hors ligne. D'une manière ou d'une autre, cela n'a pas fonctionné par ligne de commande.
J'ai téléchargé, extrait toutes les dépendances (en gardant le contrôle de la version min requise) et collé les dossiers dans le dossier de la bibliothèque. De cette façon, seul mon problème a été résolu.