1 回答

TA貢獻(xiàn)1848條經(jīng)驗(yàn) 獲得超6個(gè)贊
這實(shí)際上是本地運(yùn)行軟件和在另一個(gè)環(huán)境中運(yùn)行的一個(gè)相當(dāng)煩人的問題,我想說解決方案通常是不明顯的。您可能不是第一個(gè)遇到這種情況的人。
以下是我認(rèn)為相關(guān)的一些事實(shí):
reticulate
需要知道你的 Python 可執(zhí)行文件在計(jì)算機(jī)上的位置Python 可執(zhí)行文件的位置在您的計(jì)算機(jī)和虛擬計(jì)算機(jī)之間有所不同。shinyapps.io 運(yùn)行您的 Shiny 應(yīng)用程序
reticulate
似乎可以確定 Python 可執(zhí)行文件來自RETICULATE_PYTHON
環(huán)境變量的位置,但在未設(shè)置變量時(shí)也有一些默認(rèn)行為您計(jì)算機(jī)上的Python可執(zhí)行文件與虛擬計(jì)算機(jī)上的可執(zhí)行文件位于不同的位置shinyapps.io運(yùn)行您的Shiny應(yīng)用程序
RETICULATE_PYTHON
當(dāng)您將的值設(shè)置.Rprofile
為shinyapps.io 需要的值時(shí),您的設(shè)置會(huì)中斷,因?yàn)槟?Python 環(huán)境不同
我還沒有測(cè)試過這個(gè)解決方案,但我認(rèn)為修復(fù)實(shí)際上在您的鏈接中!查看https://github.com/ranikay/shiny-reticulate-app/blob/master/.Rprofile?并了解它們?nèi)绾伟粌H僅是簡單的賦值,RETICULATE_PYTHON
以及如何實(shí)際使用條件語句來設(shè)置各種值取決于 的結(jié)果(Sys.info()[['user']]
。
的值(Sys.info()[['user']]
將根據(jù) R 是否.Rprofile
在本地計(jì)算機(jī)上執(zhí)行與虛擬計(jì)算機(jī)上執(zhí)行而有所不同。shinyapps.io 運(yùn)行您的 Shiny 應(yīng)用程序,并且鏈接.Rprofile
正在根據(jù) R 是在本地計(jì)算機(jī)上運(yùn)行還是在虛擬計(jì)算機(jī)上運(yùn)行來設(shè)置各種值。另一臺(tái)電腦。這一切都有效,因?yàn)閟hinyapps.io
從.Rprofile中的代碼,我可以看出shinyapps.io在名為“shiny”的用戶下運(yùn)行您的Shiny應(yīng)用程序,
if?(Sys.info()[['user']]?==?'shiny'){ ??Sys.setenv(RETICULATE_PYTHON?=?paste0('/home/shiny/.virtualenvs/',?VIRTUALENV_NAME,?'/bin/python')) }
rstudio-connect
他們甚至在其中添加了一個(gè)條件塊來支持 RStudio Connect,它顯然在名為而不是“shiny”的用戶下運(yùn)行你的 Shiny 應(yīng)用程序:
}?else?if?(Sys.info()[['user']]?==?'rstudio-connect'){ ??Sys.setenv(RETICULATE_PYTHON?=?paste0(VIRTUALENV_NAME,?'/bin/python')) }
最后,.Rprofile
使用一個(gè)else
語句來捕獲任何其他情況,這將與您在自己的計(jì)算機(jī)上運(yùn)行時(shí)的情況匹配:
}?else?{?? #?RETICULATE_PYTHON?is?not?required?locally,?RStudio?infers?it?based?on?the?~/.virtualenvs?path
根據(jù)您上面的描述以及我在鏈接教程中看到的內(nèi)容,我認(rèn)為您幾乎可以將它們的全部內(nèi)容復(fù)制.Rprofile
到您的項(xiàng)目中,并且可能只需要一兩個(gè)小的修改,您應(yīng)該能夠獲得閃亮的應(yīng)用程序在本地和shinyapps.io 上運(yùn)行,帶有reticulate
.
但是,我們發(fā)現(xiàn)不設(shè)置RETICULATE_PYTHON
會(huì)遵循通過運(yùn)行 virtualenv 定義的行為,因此我可能建議RETICULATE_PYTHON
在此處設(shè)置一個(gè)值,例如位置或基于 miniconda 的 Python 可執(zhí)行文件。我猜這個(gè)值可能是./Library/r-miniconda/envs/r-reticulate/bin/python3
或類似。
如果您不想復(fù)制鏈接.Rprofile
并根據(jù)需要修改它,您可以將您的鏈接更改為僅包含此行:
if?(Sys.info()[['user']]?==?'shiny'){ ??Sys.setenv(RETICULATE_PYTHON?=?"/usr/local/bin/python3") }
然后嘗試本地運(yùn)行并部署。
添加回答
舉報(bào)