Развертывание R блестящего приложения в качестве отдельного приложения

Я разработал приложение RShiny, которым я хотел бы поделиться со своими коллегами (размещение приложения на сервере на данном этапе не вариант).

Я изучал различные варианты и наткнулся на методику объединения вашего приложения в качестве отдельного настольного приложения с файлом установщика, который вы затем можете поделиться и распространить. (Подход объяснен здесь и здесь). Это довольно изящно, потому что пользователям, устанавливающим его, не нужно иметь R (и любые другие необходимые пакеты) для установки и запуска приложения (оно имеет переносимые версии R, Chrome и т. Д.)

Я смог следовать подходу и создать отдельное настольное приложение с файлом установщика, которым я теперь могу поделиться.

Однако это мое беспокойство: в идеале я бы не хотел, чтобы мои пользователи имели доступ к исходному коду. Есть ли способ ограничить такой доступ? В уроке (первая ссылка, которую я разместил) автор говорит следующее:

*

Наконец, имейте в виду, что ваш исходный код легко доступен. Если это вас беспокоит (например, если вы распространяете среди клиентов, у которых не должно быть доступа к коду), лучшее, что вы можете сделать, - это затруднить доступ, сначала скомпилировав чувствительный исходный код в двоичный пакет. Тем не менее, любой пользователь, который знает R (и имеет достаточные намерения), может просто выгрузить код на консоль.

*

Существуют ли лучшие, более надежные способы препятствовать доступу?

Спасибо!

5 ответов

Я знаю, что время прошло с момента вашего вопроса, но я только что видел его и думаю, что у меня есть способ ответить на него.

По сути, теперь есть способ превратить приложение Shiny в отдельное приложение Electron (настольное приложение, используемое для таких приложений, как Slack). Чтобы узнать больше, посмотрите эту превосходную презентацию от useR 2018, которая содержит дополнительные ссылки на репозитории GitHub.

Я надеюсь, это поможет вам.

Я не уверен, подойдет ли он к вопросу о незаметности кода, но пакет RInno разработан для решения проблемы безопасности данных, т.е. когда компания не хочет делиться своими данными с третьей стороной. Он также автоматизирует процесс, на который вы ссылались выше, и позволяет подключать ваше приложение к GitHub/Bitbucket, чтобы загружать обновления для локально установленных блестящих приложений через вызовы API при запуске.

Для начала:

install.packages("RInno")
require(RInno)
RInno::install_inno()

Тогда вам просто нужно вызвать две функции для создания фреймворка установки:

create_app(app_name = "myapp", app_dir = "path/to/myapp")
compile_iss()

Если вы хотите включить R для ваших коллег, у которых он не установлен, добавьте include_R = TRUE в create_app:

create_app(app_name = "myapp", app_dir = "path/to/myapp", include_R = TRUE)

По умолчанию в него включены Блестящие, Магриттр и jsonlite, поэтому, если вы используете другие пакеты, такие как ggplot2 или plotly, просто добавьте их в pkgs аргумент. Вы также можете включить пакеты GitHub в remotes аргумент:

create_app(
    app_name = "myapp", 
    app_dir  = "path/to/myapp"
    pkgs     = c("shiny", "jsonlite", "magrittr", "plotly", "ggplot2"),
    remotes  = c("talgalili/installr", "daattali/shinyjs"))

Если вы заинтересованы в других функциях, проверьте FI Labs - RInno. Если вы хотите узнать, как подключить его к GitHub/Bitbucket, ознакомьтесь с Руководством по непрерывной установке:).

Возможно, вас заинтересует DesktopDeployR, фреймворк для развертывания автономных приложений на основе R на рабочем столе.

https://github.com/wleepang/DesktopDeployR

Я не знаком с таким подходом, это распространено? Я лично никогда не видел это. Похоже, что по сути дела вы объединяете R, Shiny, веб-браузер и ваш код в файл. Это как если бы клиент устанавливал R, Chrome, Shiny и запускал ваш код, но он просто делал все это в один клик. Вы буквально даете пользователю свой код. Я не знаю, как это работает, но если сам автор утверждал, что клиент сможет видеть исходный код, то это имеет смысл для меня, и я не думаю, что вы можете избежать этого.

Почему бы просто не разместить файл на блестящем сервере или shinyapps.io? Клиент не увидит ваш код тогда. Кроме того, действительно ли так важно, чтобы они не могли видеть ваш код? Часто люди боятся, что другие увидят их код, но на самом деле никто не заботится о том, чтобы посмотреть на код других людей и украсть его. Если у вас нет очень запатентованного и продвинутого запатентованного кода.

Вы также можете запустить свое блестящее приложение из исполняемого файла ".bat" с кодом, который запускает ваше приложение из командной строки. Просто откройте текстовый редактор и добавьте следующую строку:

      R -e "shiny::runApp('app.R',launch.browser=TRUE) 

Вы можете сохранить его, например, как test.bat. Переименуйте app.R в любое имя вашего блестящего приложения. Убедитесь, что для запуска браузера установлено значение ИСТИНА, иначе приложение будет только «слушать».

Если вы хотите, чтобы любые отчеты Rmd работали плавно, также добавьте путь pandoc к коду вашего блестящего приложения. Например, добавьте строку:

      Sys.setenv(RSTUDIO_PANDOC="C:/Program Files/RStudio/bin/pandoc") 

Вы можете получить свой путь к pandoc, запустив: rmarkdown::find_pandoc()

Также убедитесь, что R находится в среде пути (например, добавьте «C: \ Program Files \ R\R-4.1.0\bin» в среду пути)

Пользователи будут иметь доступ к вашему исходному коду, если они действительно этого захотят, и R необходимо установить на ПК, на котором запущен файл bat, но это может быть хорошим способом быстро развернуть shinyapp, например, для небольших команд, у которых есть общая рабочая станция. И вам не нужно платить или устанавливать сервер.

Другие вопросы по тегам