为了账号安全,请及时绑定邮箱和手机立即绑定

由于 reticulate_python 导致闪亮应用程序部署出现问题

由于 reticulate_python 导致闪亮应用程序部署出现问题

繁花如伊 2023-10-11 20:13:15
我有一个应用程序想要部署在shinyapps.io 上。我认为值得注意的是,应用程序中的数据是从 athena 的数据库中提取的。我使用Rathena包连接到数据库,并且所有内容都可以从我的计算机本地正常运行。但是,我尝试将其部署到shinyapps.io 上,但收到一条消息,指出发生了错误。我只是在部署后弹出的窗口中看到了这一点。我查看了shinyapps.io 的日志部分,看到这样的消息:警告:使用网状但未指定 python;将在 /usr/bin/python3 使用 python 您是否忘记在发布之前在 .Rprofile 中设置 RETICULATE_PYTHON 环境变量?我从未使用过 .Rprofile,并且我不知道 RETICULATE_PYTHON 意味着什么。无论如何,他们在堆栈溢出上说谷歌是你最好的朋友。我在 Github 上找到了这个名为 Tutorial: using Shiny + reticulate to create apps with R and Python 3 的教程。我按照它所说的执行了最初的步骤,然后在最后说:确认 .Rprofile 文件包含在您的项目目录中,并与 server.R 和 ui.R 一起部署到shinyapps.io。该文件设置 RETICULATE_PYTHON 环境变量,该变量告诉 reticulate 在shinyapps.io 服务器上的何处定位 Python 虚拟环境。我查了一下 .Rprofile 是什么,我认为它只是一个代码脚本,但它没有告诉我应该在那里放什么代码。我想我需要提到Rathena包使用 Python 代码来连接到数据库。我还在某处读到,我应该将此行RETICULATE_PYTHON = /usr/local/bin/python3放在我的 .Renviron 文件中。我这样做了,现在当我尝试在我的计算机上本地运行该应用程序时,我收到错误消息:错误:未检测到 Boto3 请使用以下任一方式安装 boto3:pip install boto3 numpy在终端中或install_boto(). 如果这不起作用,请设置您正在使用的 pythonreticulate::use_python()或reticulate::use_condaenv()这没有意义,因为我已经安装了 boto3,甚至在终端中它也显示已满足要求:./Library/r-miniconda/envs/r-reticulate/lib/python3.6/site-packages 中的 boto3 (1.14.28)我感觉我在这里兜圈子。
查看完整描述

1 回答

?
慕勒3428872

TA贡献1848条经验 获得超6个赞

这实际上是本地运行软件和在另一个环境中运行的一个相当烦人的问题,我想说解决方案通常是不明显的。您可能不是第一个遇到这种情况的人。

以下是我认为相关的一些事实:

  • reticulate需要知道你的 Python 可执行文件在计算机上的位置

  • Python 可执行文件的位置在您的计算机和虚拟计算机之间有所不同。shinyapps.io 运行您的 Shiny 应用程序

  • reticulate似乎可以确定 Python 可执行文件来自RETICULATE_PYTHON环境变量的位置,但在未设置变量时也有一些默认行为

  • 您计算机上的Python可执行文件与虚拟计算机上的可执行文件位于不同的位置shinyapps.io运行您的Shiny应用程序

  • RETICULATE_PYTHON当您将的值设置.Rprofile为shinyapps.io 需要的值时,您的设置会中断,因为您的 Python 环境不同

我还没有测试过这个解决方案,但我认为修复实际上在您的链接中!查看https://github.com/ranikay/shiny-reticulate-app/blob/master/.Rprofile 并了解它们如何包含不仅仅是简单的赋值,RETICULATE_PYTHON以及如何实际使用条件语句来设置各种值取决于 的结果(Sys.info()[['user']]

的值(Sys.info()[['user']]将根据 R 是否.Rprofile在本地计算机上执行与虚拟计算机上执行而有所不同。shinyapps.io 运行您的 Shiny 应用程序,并且链接.Rprofile正在根据 R 是在本地计算机上运行还是在虚拟计算机上运行来设置各种值。另一台电脑。这一切都有效,因为shinyapps.io

从.Rprofile中的代码,我可以看出shinyapps.io在名为“shiny”的用户下运行您的Shiny应用程序,

if (Sys.info()[['user']] == 'shiny'){
  Sys.setenv(RETICULATE_PYTHON = paste0('/home/shiny/.virtualenvs/', VIRTUALENV_NAME, '/bin/python'))
}

rstudio-connect他们甚至在其中添加了一个条件块来支持 RStudio Connect,它显然在名为而不是“shiny”的用户下运行你的 Shiny 应用程序:

} else if (Sys.info()[['user']] == 'rstudio-connect'){
  Sys.setenv(RETICULATE_PYTHON = paste0(VIRTUALENV_NAME, '/bin/python'))
}

最后,.Rprofile使用一个else语句来捕获任何其他情况,这将与您在自己的计算机上运行时的情况匹配:

} else {  
# RETICULATE_PYTHON is not required locally, RStudio infers it based on the ~/.virtualenvs path

根据您上面的描述以及我在链接教程中看到的内容,我认为您几乎可以将它们的全部内容复制.Rprofile到您的项目中,并且可能只需要一两个小的修改,您应该能够获得闪亮的应用程序在本地和shinyapps.io 上运行,带有reticulate.

但是,我们发现设置RETICULATE_PYTHON会遵循通过运行 virtualenv 定义的行为,因此我可能建议RETICULATE_PYTHON在此处设置一个值,例如位置或基于 miniconda 的 Python 可执行文件。我猜这个值可能是./Library/r-miniconda/envs/r-reticulate/bin/python3或类似。

如果您不想复制链接.Rprofile并根据需要修改它,您可以将您的链接更改为仅包含此行:

if (Sys.info()[['user']] == 'shiny'){
  Sys.setenv(RETICULATE_PYTHON = "/usr/local/bin/python3")
}

然后尝试本地运行并部署。



查看完整回答
反对 回复 2023-10-11
  • 1 回答
  • 0 关注
  • 103 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信