亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

由于 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 關注
  • 147 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號