【问题标题】:Packages missing in shiny-server闪亮服务器中缺少的软件包
【发布时间】:2013-04-10 13:20:13
【问题描述】:

我正在尝试使用闪亮创建一个 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 包(或我尝试使用的任何其他包)的错误这种方式)未安装。我如何在闪亮的服务器中使用额外的包?

【问题讨论】:

    标签: r shiny shiny-server


    【解决方案1】:

    问题是 shiny-server 找不到您安装的软件包,因为它以另一个名为 shiny 的用户身份运行它们。该用户是在安装闪亮服务器时创建的

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

    1. 使用sudo passwd shiny为用户设置密码,现在输入并确认密码
    2. 使用以下命令切换到闪亮帐户:su - shiny
    3. 使用$ R(不带sudo)调用R
    4. 安装所需的包,在这种情况下:install.packages("plyr")

    请注意,如果您在同一台机器上安装了 rstudio-server,那么您可以使用该界面执行步骤 2-4。只需转到相同的域/IP 并使用 :8787 作为 rstudio-server 接口,而不是 :3838 作为闪亮服务器。

    改编自我的回答here

    【讨论】:

    • 尝试第 1 步,我得到“passwd: Unknown user name 'shiny'”。 - 任何解决方案?
    • @maia,这个帐户应该在您安装 shiny-server 时创建,但是,您可以使用:useradd shiny 手动创建。我希望这行得通。
    • 您不需要为用户添加密码。只需从第 2 步开始,su - shiny
    • 同意,但如果您要使用用户,那将是一个好主意
    【解决方案2】:

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

    例如,您可能在“您的”R 包目录中拥有服务器无法访问的包。在这种情况下,系统范围的软件包安装更可取——例如Debian / Ubuntu 上的默认设置。

    【讨论】:

    • 一个简单的检查方法实际上是sudo R,然后查看(例如library(myPotentiallyMissingPackage))。如果需要,您还可以从那里安装缺少的软件包。
    • 做。不是。开始。 R. 作为。须藤。永远。
    • 嗯,这似乎很糟糕,但我能问一下:为什么? :-)
    • 您真的不想以 root 身份运行任何东西,因为如果该程序因任何原因受到威胁,您的整个服务器现在都会受到威胁。因此,如果 R 中存在任何安全漏洞,当以 root 身份运行时,您现在允许这些威胁让您的机器被不良进程/人员/等接管。
    【解决方案3】:

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

    user <- unname(Sys.info()["user"])
    if (user == "shiny") {
    
      # Set library locations
      .libPaths(c(
        "/path/to/your/own/library"
      )
      )
    
    }
    

    这让 Shiny 可以优先查找安装在您自己的库中的包,并且还可以使您用于开发应用程序的包与部署应用程序时使用的包保持同步。

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

    【讨论】:

      【解决方案4】:

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

      【讨论】:

        【解决方案5】:

        如果软件包安装在您的 R 库中。让它在闪亮服务器上运行的最简单方法是向闪亮指示包所在的库目录。类似:library(plyr, lib.loc="/usr/local/lib/R/site-library")。如果你安装了R-Studio,可以查看.libPaths()的目录

        【讨论】:

          【解决方案6】:

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

          【讨论】:

            猜你喜欢
            • 2016-05-08
            • 2018-04-21
            • 2019-11-18
            • 2015-05-04
            • 2016-12-28
            • 2021-11-07
            • 2021-03-10
            • 1970-01-01
            • 2019-09-22
            相关资源
            最近更新 更多