1 回答

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") }
然后嘗試本地運行并部署。
添加回答
舉報