闪亮服务器中缺少软件包

时间:2013-04-17 16:53:13

标签: r shiny shiny-server

我正在尝试使用闪亮创建一个Web应用程序。它需要我加载我在计算机上安装的软件包。例如:

## Contents ui.R:
library(shiny)
library(plyr)

shinyUI(pageWithSidebar(

  headerPanel("Hello Shiny!"),

  sidebarPanel(
    sliderInput("obs", 
                "Number of observations:", 
                min = 0, 
                max = 1000, 
                value = 500)
  ),

  mainPanel(
    plotOutput("distPlot")
  )
))

## Contents server.R:
library(shiny)
library(plyr)

shinyServer(function(input, output) {

  output$distPlot <- renderPlot({

    # generate an rnorm distribution and plot it
    dist <- rnorm(input$obs)
    hist(dist)
  })
})

如果我在本地运行它(使用runApp),这可以正常工作但是当我尝试通过我的服务器(同一台计算机)运行它时,我得到plyr包(或任何其他包)的错误我尝试使用这种方式)没有安装。我如何在闪亮的服务器中使用额外的包?

6 个答案:

答案 0 :(得分:9)

问题是,闪亮服务器无法找到您安装的软件包,因为它将其作为名为shiny的其他用户运行。此用户是在安装shiny-server

时创建的

解决此问题的最简单(也是最安全的恕我直言)方法是使用以下步骤将软件包安装为闪亮的用户。

  1. 使用sudo passwd shiny为用户设置密码,现在输入并确认密码
  2. 使用:su - shiny
  3. 切换到闪亮帐户
  4. 使用R(不使用sudo)
  5. 来调用$ R
  6. 安装所需的软件包,在本例中为install.packages("plyr")
  7. 请注意,如果您在同一台计算机上安装了rstudio-server,则可以使用该界面执行步骤2-4。只需使用相同的域/ ip并使用:8787用于rstudio-server接口,而不是:3838用于闪亮服务器。

    改编自我的回答here

答案 1 :(得分:8)

在两种情况下比较.libPaths()的输出,并在服务器实例/您的脚本中进行相应调整。

例如,你可以在&#34;你的&#34;服务器无法访问的R包目录。在这种情况下,系统范围的封装安装是优选的 - 例如, Debian / Ubuntu上的默认值。

答案 2 :(得分:2)

这可能是一个不会搞乱系统库的解决方案。将以下代码放在server.R

的开头
user <- unname(Sys.info()["user"])
if (user == "shiny") {

  # Set library locations
  .libPaths(c(
    "/path/to/your/own/library"
  )
  )

}

这使Shiny能够优先查找自己库中安装的软件包,并保留用于开发应用程序的软件包以及在同步部署应用程序时使用的软件包。

请注意,您可能需要调整库文件夹的权限,以便shiny用户正确查看。否则,它将无法在没有任何错误消息的情况下查看您指定的位置。

答案 3 :(得分:0)

我已经从R 3.2升级到3.4并面临同样的问题,然后我在R / x86_64-pc-linux-gnu-library /中创建了一个名为3.4的文件夹,并复制了3.2文件夹中的所有内容(已经存在于同一地点)。

答案 4 :(得分:0)

如果软件包已安装在R库中。使它在Shiny-server上运行的最简单方法是向Shiny指示软件包所在的库目录。类似于: return new ResponseEntity<byte[]>(result, HttpStatus.OK); 。如果已安装R-Studio,则可以使用library(plyr, lib.loc="/usr/local/lib/R/site-library")

查看目录

答案 5 :(得分:-2)

你为什么需要Plyr?你的代码中没有任何东西在使用它;但无论如何,您可以通过运行R安装Linux R安装包,然后安装.packages('plyr');