Shiny应用的版本规格无效

问题描述 投票:1回答:1

当我尝试将我的(网状结构的)Shiny应用部署到 shinyapps.io,我得到以下错误。

Error in value[[3L]](cond) : invalid version specification ‘20.1b1’
Calls: local ... tryCatch -> tryCatchList -> tryCatchOne -> <Anonymous>
Execution halted

虽然没有明确指出,我想这个错误是指pip的版本,我从来没有明确指出。

这是在ui和server函数之前的那部分代码。

library(reticulate)
library(shiny)

virtualenv_create(envname = "elicit", python="python3")
virtualenv_install("elicit", packages = c('numpy', 'Gpy'))
use_virtualenv("elicit", required = TRUE)

当我把这部分代码和所有与Python相关的代码一起注释出来时,一切都很正常。

我如何设置网站请求的有效版本?我看到 reticulate::virtualenv 拥有 pip_options 参数,但我找不到关于如何使用它的有用文档。

我对设置虚拟环境和conda环境也不是很精通,所以我很可能遗漏了一些基本步骤。

更新

我注意到,如果我切换了顺序的 use_virtualenvvirtualenv_install 调用时,我得到了一个不同的错误。

ERROR: The requested version of Python
('~/.virtualenvs/elicit/bin/python') cannot be used, as another version
of Python ('/usr/bin/python3') has already been initialized. Please
restart the R session if you need to attach reticulate to a different
version of Python.
Error in value[[3L]](cond) : 
  failed to initialize requested version of Python
Calls: local ... tryCatch -> tryCatchList -> tryCatchOne -> <Anonymous>
Execution halted

我试过了所有我能想到的方法,但我也无法解决这个问题。

python r shiny pip shinyapps
1个回答
1
投票

其实我找到了解决这个问题的方法。由于pip的错误版本在你创建virtualenv时就会被安装,所以我强行卸载了它,然后安装了在我创建应用时能用的版本。这是我使用的代码。

virtualenv_create(envname = "python_environment", python = "python3")
virtualenv_remove(envname = "python_environment", packages = "pip")
virtualenv_install(envname = "python_environment", packages = c("pip==19.0.3","numpy","nltk","torch"), ignore_installed = TRUE)
use_virtualenv("python_environment", required = TRUE)

0
投票

我把这段代码写成了被接受的答案的注释 但我也把这段代码作为答案贴出来,以便更好地了解和进一步解释

对我的情况来说,最后起作用的是创建了个 .Rprofile 文件,其中包含以下一行。

Sys.setenv(RETICULATE_PYTHON = "~/.virtualenvs/elicit/bin/python3")

该文件应位于与以下文件相同的文件夹中 app.R 并应部署到远程服务器。最后的 app.R 文件和问题中发布的一样。


更新了。 最终这个文件又坏了,我的解决方法是删除并重新安装pip(正如theThalamus所指出的),但不指定pip版本。所以 app.R 会是这样的。

virtualenv_create(...)  # create virtual environment
virtualenv_remove(envname = "python_environment", packages = "pip")
virtualenv_install(envname = "python_environment", packages = "pip")
virtualenv_install(...)  # install other packages

这两个 virtualenv_install 实例可能会被合并,但我决定将它们分开来强调修复。

© www.soinside.com 2019 - 2024. All rights reserved.