99 votes

Compiler le script de R en fichier .exe autonome ?

Existe-t-il un moyen simple de compiler mon R script en standalone .exe comme ce que fait Matlab ?

17 votes

Réponse très courte : Non. Cela n'a jamais été le cas.

2 votes

En fait, j'aimerais le distribuer mais en gardant les scripts et l'algorithme secrets, y a-t-il un moyen de les crypter ou un autre moyen d'atteindre cet objectif ?

2 votes

De nombreuses discussions ont eu lieu à l'adresse suivante stackoverflow.com/questions/4707276/

36voto

Konrad Points 3100

En fait, il existe un moyen de parvenir à une solution qui répondrait à vos besoins. Jetez un coup d'œil à l'article sur le Déploiement Applications de bureau avec R sur les R-Bloggers. Comme détaillé dans l'article, vous finirez par utiliser un peu plus de choses qu'un simple fichier exe.

J'aimerais également attirer votre attention sur la RGtk2 avec l'utilisation de la RGtk2 vous pourriez essayer de développer votre propre interface en R. Si la situation se complique, je suis sûr que vous pourriez regrouper votre code R avec une version portable de R et ses dépendances dans un installateur et créer une application à partir de celui-ci, ce qui créerait l'illusion d'un seul fichier exe.

Dans votre question, vous avez demandé si c'est facile pour développer un fichier exécutable autonome interprétant le code R. Je ne dirais pas que c'est facile. Si vous avez une forte envie d'exécuter un code R à partir d'une application, vous pouvez le faire de manière plus simple en utilisant RCaller pour Java ou R.NET .

1 votes

L'article lié sur le déploiement d'applications de bureau avec R est vraiment bon (utilise des applications portables et brillantes !), merci !

2 votes

@RYoda Je suis heureux de lire cela. Ce sujet suscite de l'intérêt. Si vous voulez vous en tenir à Shiny, cet article fournit des conseils intéressants sur l'emballage d'une application Shiny en tant qu'application de bureau Windows.

0 votes

Il est également possible d'utiliser le moteur de script RCaller à travers l'API javax.script, voir mhsatman.com/rcaller-3-0

12voto

MadScone Points 1927

En réponse à votre commentaire :

En fait, je voudrais le distribuer mais en gardant les scripts et les et l'algorithme sont secrets, y a-t-il un moyen de crypter cela ou un autre moyen de pour atteindre cet objectif ?

Vous pouvez (en quelque sorte) le faire en sauvegardant les fonctions à l'aide des éléments suivants save() . Par exemple, voici une fonction f() que vous voulez garder secret :

f <- function(x, y) {
  return(x + y)
}

Enregistrez-le où vous voulez :

save(f, file = 'C:\\Users\\Joyce\\Documents\\R\\Secret.rda')

Et quand vous voulez utiliser la fonction :

load("C:\\Users\\Joyce\\Documents\\R\\Secret.rda")

Je sauvegarderais toutes mes fonctions dans des fichiers séparés, je les mettrais dans un dossier et j'aurais un bon vieux .R script qui les chargerait toutes et les exécuterait. Zippez le tout et distribuez-le à qui vous voulez. Peut-être même le compiler dans un paquet. Effectivement, le tout serait alors en lecture seule.

Cette solution n'est cependant pas si géniale. Vous pouvez toujours voir la fonction dans R en tapant le nom de la fonction, elle n'est donc pas cachée dans ce sens. Mais si vous ouvrez les fichiers .rda, leur contenu est brouillé. Tout dépend vraiment de l'expérience des destinataires de votre code avec R.

0 votes

Merci pour la suggestion, cela peut être un moyen d'empêcher les autres de voir directement les codes, merci encore.

6 votes

Mais il apparaîtra une fois que vous aurez tapé f .

6voto

Jan Points 2954

J'ai fait quelques recherches sur cette question et quelques solutions ont été mises en œuvre au cours des dernières années.

  1. Une autre option est d'envelopper votre application avec un R portable dans une application conteneur comme Electron. Le site démarrage rapide des électrons Le projet tente ceci.
  2. En Paquet RInno fournit des fonctions pour regrouper votre application et le portable R dans une application d'installation. Chaque utilisateur exécute l'installateur sur son système une fois, ce qui installe votre application, les paquets et le code. Mais au final, les utilisateurs ne voient pas forcément la différence avec les autres applications. Ils obtiennent un lien dans le menu de démarrage et c'est tout. Je l'ai fait avec succès. Mais cela n'a pas fonctionné dès le départ. J'ai dû ajuster manuellement la sortie à plusieurs endroits.
  3. Une deuxième solution de conteneur fonctionne avec docker. C'est ce que ShinyProxy fait. Voir également ceci blog .
  4. Le paquet shinyShortcut (je cite) "produira un fichier exécutable qui lancera l'application brillante directement dans le navigateur par défaut de l'utilisateur".

Il est important de noter que je n'ai pas testé la plupart d'entre elles. En examinant les solutions, j'ai souvent l'impression qu'elles compliquent un peu les versions, car elles impliquent toujours des étapes manuelles.

5voto

Greg Snow Points 22040

Une forme de code crypté est mise en œuvre dans l'application petals dans le paquet TeachingDemos.

Notez qu'il ne faut que des compétences en programmation de niveau intermédiaire pour trouver le code caché, mais que cela demande un effort délibéré et que l'utilisateur ne pourra pas prétendre avoir vu le code par hasard. Il faudrait alors mettre en place un certain type de contrat de licence pour faire respecter les accords d'interdiction d'accès.

0 votes

Merci Greg, je viens de regarder la fonction que vous avez mentionnée, mais je n'arrive pas à comprendre comment l'utiliser pour cacher les codes, pourriez-vous avoir l'amabilité de m'en dire plus ?

0 votes

@Joyce, le petals ne cache pas le code, c'est un exemple de dissimulation d'un élément clé du code (pouvez-vous lire l'élément clé ?). D'autres outils sont nécessaires pour effectuer le cryptage (blanchiment). Une approche plus simple est discutée à l'adresse suivante stat.ethz.ch/pipermail/r-devel/2011-octobre/062236.html . La compilation par octets peut également être utile, mais vous avez vraiment besoin d'un accord de licence.

4voto

turnt Points 1913

Vous allez avoir besoin de R installé sur la machine de déploiement. Quant à la création d'un exécutable, je ne suis pas sûr que ce soit possible. Mais vous pouvez créer un autre programme qui invoque votre script R. R est un langage interprété. Ce n'est pas possible.

5 votes

Avons-nous des nouvelles d'un compilateur R ? J'ai commencé à utiliser Python et il y a des moyens faciles de produire des fichiers exe (py2exe et cx_freeze par exemple). Y a-t-il une chance de voir quelque chose comme ça dans R bientôt ?

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X