2011-05-24 2 views
2

Je développe un paquet R qui a des dépendances système (une grande partie du paquet est en C++) et qui s'intéresse aux meilleures pratiques de distribution. Je crois qu'il n'y a aucun moyen de distribuer des paquets système avec un paquet R. Semble que ce problème a attiré l'attention récemment dans this thread. Supposons que l'utilisateur ne dispose pas d'un accès root et utilise une installation locale de R. Quelle est la meilleure façon pour lui d'obtenir ces packages localement? Est-ce aussi simple que de télécharger les bibliothèques partagées et de les ajouter à $ R_HOME/Libraries? Ou est-il préférable pour eux de télécharger des dépendances dans un dossier local et de définir LD_LIBRARY_PATH? Je suis assez nouveau à R, donc je me demande s'il y a une solution "préférée" pour la meilleure expérience de l'utilisateur final.Dépendances système du paquet R sans accès root

Répondre

1

S'il s'agit en fait de bibliothèques système, il suffit de s'en remettre à elles et éventuellement de les tester via autoconf. De nombreux forfaits CRAN font la même chose. Pour réinventer le déploiement des bibliothèques partagées, il est préférable de laisser le système d'exploitation, la distribution Linux, l'administrateur système, ... plutôt que votre application utilisateur.

+0

Dirk, merci pour la réponse. Malheureusement, c'est une option vraiment peu attrayante pour nous. C'est une application académique qui est le plus souvent utilisée sur de grands clusters informatiques, où les utilisateurs gardent souvent leur propre installation locale de R avec les paquets dont ils ont besoin. Les administrateurs peuvent hésiter à ajouter des packages système pour chaque demande d'utilisateur. Je pense que ce serait un ajout utile à l'environnement R. –

0

Vous pouvez inclure tout ce que vous voulez dans le répertoire inst/, y compris un sous-répertoire lib. Si tout ce que vous voulez, c'est pouvoir accéder à ces bibliothèques à l'exécution, vous pouvez probablement utiliser quelque chose comme Sys.setenv(LD_LIBRARY_PATH=system.file("lib",package="mypkg")) pour définir les chemins de la bibliothèque en conséquence.

Si vous avez besoin des bibliothèques pour la liaison au moment de l'installation/de la construction, cela pourrait être un peu plus gênant. Je peux imaginer que vous pourriez configurer vos scripts de configuration et Makefiles (pages 13-15 du manuel des extensions de R) pour regarder au bon endroit ... mais je ne sais pas comment faire cela et il faudrait probablement quelques futzing autour de le faire (s'il vous plaît documenter si vous le faites!)

Notez que les paquets incorporant des fichiers binaires ne sont pas autorisés sur CRAN (pour des raisons évidentes de sécurité), bien que R-Forge ne leur permet ...

(Aucun de ces conseils est testé - j'ai distribué binaire executables dans les paquets, mais jamais les bibliothèques - donc j'espère que ce sera utile, ou du moins pas induire en erreur.)

0

Vous pourriez wa nt de regarder le paquet bigmemory pour une approche - il comprend un sous-ensemble non trivial (16 méga-valeur) de coup de pouce.

+0

Pas vraiment car ce sont des en-têtes de template qui se déforment au moment de la compilation; OP veut un hack pour les bibliothèques. La réponse de Ben est plus proche. –

+0

Ooops, aurait pu jurer que ces fichiers étaient '.cpp'. C'est incroyable que boost ait 16 méga de fichiers d'en-tête! – hadley

+0

Il y a quelques paquets qui expédient tous les en-têtes de Boost (dans un modèle pur) donc nous avons eu des discussions sur la création d'un commun dont ils dépendraient tous. –

Questions connexes