【问题标题】:Invalid version specification on Shiny appShiny 应用上的版本规范无效
【发布时间】:2020-08-05 06:52:53
【问题描述】:

当我尝试将我的(网状驱动的)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)

当我将它与来自 UI 和服务器的任何 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】:

    我实际上找到了解决此问题的方法。由于 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)
    

    【讨论】:

    • 这无疑给了我进步,但现在我收到“没有名为 'numpy' 的模块”错误(即使软件包是按照您的代码安装的)。然后,如果我在 app.R 中添加 py_install("numpy"),我会收到“找不到 /usr/bin/python3 的 Python 环境”错误。我觉得我错过了一些基本步骤。
    • 这很奇怪,numpy肯定应该通过virtualenv中的代码安装。虽然很难在没有看到您的代码的情况下判断问题出在哪里。通过source_python 使用 reticulate 检查您导入到 R 的 Python 函数可能问题出在代码的 Python 部分而不是 Shiny
    • 我终于让它工作了。诀窍是在包含 Sys.setenv(RETICULATE_PYTHON = "~/.virtualenvs/python_environment/bin/python3") 的 Shiny 根文件夹中创建一个 .Rprofile 文件,仅此而已。我以为我可以将该路径作为rsconnect::deployApppython 参数传递,但似乎并非如此。在我这样做之后,甚至不需要重新安装 pip。
    • 您好,我也遇到了同样的问题,添加您提供的代码后,错误消失了,但出现了新错误:sh: 1: /home/shiny/.virtualenvs/python35_env /bin/pip:未找到错误:安装软件包时出错:“pip”执行已停止。你知道这背后发生了什么吗?
    【解决方案2】:

    我将此作为对已接受答案的评论,但我也将其作为答案发布,以提高知名度和进一步解释。

    最终对我的案例起作用的是创建一个包含以下行的 .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 实例可能可以合并,但我决定将它们分开以突出显示修复。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-01-04
      • 2021-02-09
      • 2020-04-20
      • 1970-01-01
      • 2022-01-05
      • 1970-01-01
      • 2018-01-18
      • 1970-01-01
      相关资源
      最近更新 更多