Shiny 应用程序的版本规范无效
Invalid version specification on Shiny app
当我尝试将我的(网状驱动的)Shiny 应用程序部署到 shinyapps.io 时,出现以下错误:
Error in value[[3L]](cond) : invalid version specification ‘20.1b1’
Calls: local ... tryCatch -> tryCatchList -> tryCatchOne -> <Anonymous>
Execution halted
虽然不明确,但我想错误是指 pip 版本,我从未明确指定。
这是 ui 和服务器函数之前的代码部分:
library(reticulate)
library(shiny)
virtualenv_create(envname = "elicit", python="python3")
virtualenv_install("elicit", packages = c('numpy', 'Gpy'))
use_virtualenv("elicit", required = TRUE)
当我将其与来自 UI 和服务器的任何 Python 相关代码一起注释掉时,一切正常。
如何设置站点请求的有效版本?我看到 reticulate::virtualenv
有一个 pip_options
参数,但我找不到关于如何使用它的有用文档。
我也不是很擅长设置虚拟和 conda 环境,所以我很可能会遗漏一些基本步骤。
更新
我注意到,如果我调换 use_virtualenv
和 virtualenv_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
我已经尝试了所有我能想到的方法,但我也无法解决这个问题。
我实际上找到了解决这个问题的方法。由于在您创建 virtualenv 后会立即安装有漏洞的 pip 版本,因此我强行卸载了它,然后安装了在构建我的应用程序时可用的版本。这是我使用的代码:
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)
我写这篇文章是作为对已接受答案的评论,但我也将其作为答案发布,以提高可见性和进一步解释。
最终对我的案例有用的是创建一个包含以下行的 .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
实例可能会合并,但我决定将它们分开以突出修复。
当我尝试将我的(网状驱动的)Shiny 应用程序部署到 shinyapps.io 时,出现以下错误:
Error in value[[3L]](cond) : invalid version specification ‘20.1b1’
Calls: local ... tryCatch -> tryCatchList -> tryCatchOne -> <Anonymous>
Execution halted
虽然不明确,但我想错误是指 pip 版本,我从未明确指定。
这是 ui 和服务器函数之前的代码部分:
library(reticulate)
library(shiny)
virtualenv_create(envname = "elicit", python="python3")
virtualenv_install("elicit", packages = c('numpy', 'Gpy'))
use_virtualenv("elicit", required = TRUE)
当我将其与来自 UI 和服务器的任何 Python 相关代码一起注释掉时,一切正常。
如何设置站点请求的有效版本?我看到 reticulate::virtualenv
有一个 pip_options
参数,但我找不到关于如何使用它的有用文档。
我也不是很擅长设置虚拟和 conda 环境,所以我很可能会遗漏一些基本步骤。
更新
我注意到,如果我调换 use_virtualenv
和 virtualenv_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
我已经尝试了所有我能想到的方法,但我也无法解决这个问题。
我实际上找到了解决这个问题的方法。由于在您创建 virtualenv 后会立即安装有漏洞的 pip 版本,因此我强行卸载了它,然后安装了在构建我的应用程序时可用的版本。这是我使用的代码:
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)
我写这篇文章是作为对已接受答案的评论,但我也将其作为答案发布,以提高可见性和进一步解释。
最终对我的案例有用的是创建一个包含以下行的 .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
实例可能会合并,但我决定将它们分开以突出修复。