【问题标题】:Unable to change Python path in reticulate无法在网状结构中更改 Python 路径
【发布时间】:2023-03-26 16:11:01
【问题描述】:

我在启动我的 rstudio 会话时运行的第一行是:

library(reticulate)
use_python("/usr/local/lib/python3.6/site-packages")

但是,当我运行 py_config() 时,它显示为仍在使用默认的 python 2.7 安装。

这是一个问题,因为我无法导入为 python3 安装的任何模块。知道为什么这不起作用吗?我非常密切地关注文档。

【问题讨论】:

  • 我认为启动存在一些问题——一旦启动一个版本,就无法更改(或类似的东西)。我通过在~/.RenvironRETICULATE_PYTHON="/usr/local/miniconda3/bin/python" (使用您想要的路径)中设置它来解决它,尽管您可以使用$PATH 做同样的事情(考虑RStudio/其他编辑器使用它的版本;您可以也想在.Renviron 中设置)。
  • @alistaire 我如何访问/找到 .renviron?对 r 来说是新手,所以以前没有使用过,具体如何使用它并不明显。
  • 它是您主目录中的一个文本文件,例如.Rprofile。如果您以前没有使用过它,您可能需要创建它。 Here's an example.
  • 运行usethis::edit_r_environ()访问.Renviron,使用.Rprofile访问usethis::edit_r_profile()

标签: r python-3.x reticulate


【解决方案1】:

我观察到 .RProfile 中的“use_python('path')”技术和 Sys.setenv(RETICULATE_PYTHON = 'path') 的策略都没有对我有用(当然我确信它一定对其他人有用。 )

无论如何,终端线,

which -a python python3

确实产生了两个可供选择的路径(一个用于安装在我的 mac 上的 python2 和一个用于 python3),因此我能够在我的主目录中创建一个“.Renviron”文件,其中包含一行:

RETICULATE_PYTHON="/usr/local/bin/python3"

我重启RStudio后,library(reticulate)激活了想要的python3,repl_python()打开了python3交互窗口等等。

【讨论】:

  • 你的意思大概是“主目录”:/Users/<username>/(在 OSX 上)
  • 谢谢,是的,在我的情况下,它是快捷方式“cd ~”或简单的“cd”到达的目录
  • 这是经过数小时搜索后的解决方案。感激不尽。
  • 试过其他人,但只有这个解决方案对我有用。
  • 您还可以使用相同的代码 RETICULATE_PYTHON='Path to your python env' 创建一个 .Renviron 文件,我还建议您使用名为 reticulate 的 conda 设置一个虚拟环境,其中您安装了 PyQt5
【解决方案2】:

它对我有用:

Sys.setenv(RETICULATE_PYTHON = "/usr/bin/python3")
library(reticulate)

在第一次使用 reticulate 之前设置 RETICULATE_PYTHON 似乎很重要。

【讨论】:

  • 这很好用。在其他响应中,如果您在 R 代码中使用多个 python 环境,则添加 .Renviron 的路径可能会出现问题。在这种情况下,您的建议会更好。
【解决方案3】:

use_python("path/to/python3") 肯定不起作用,尽管Reticulate Python version configuration article 这么说。不要相信! :-)

我曾尝试用当前的 Reticulate 版本(1.13)设置解释器,包给了我一个非常诚实的答案:

> library("reticulate")
> repl_python()
Python 2.7.15 (/usr/bin/python)
Reticulate 1.13 REPL -- A Python interpreter in R.
> use_python('/usr/bin/python3', require=T)
ERROR: The requested version of Python ('/usr/bin/python3') cannot be
used, as another version of Python ('/usr/bin/python') has already been
initialized. Please restart the R session if you need to attach
reticulate to a different version of Python.
Error in use_python("/usr/bin/python3", require = T) : 
  failed to initialize requested version of Python

幸运的是,将包含行 RETICULATE_PYTHON="/path/to/python3".Renviron 文件放入用户的主目录确实有效

> library("reticulate")
> py_config()
python:         /usr/bin/python3
libpython:      /usr/lib/python3.6/config-3.6m-x86_64-linux-gnu/libpython3.6.so
pythonhome:     /usr:/usr
version:        3.6.8 (default, Oct  7 2019, 12:59:55)  [GCC 8.3.0]
numpy:           [NOT FOUND]

NOTE: Python version was forced by RETICULATE_PYTHON

最后,我的答案的附加值来了:

您可以通过将RETICULATE_PYTHON 行添加到全局Renviron 文件来为所有用户配置网状Python 解释器。它通常位于 R 主目录的 etc 子目录中。您可以通过在 R 解释器中运行 R.home() 函数来找出 R 的家在哪里。在我的情况下(Ubuntu 18.04.3 LTS)它是/usr/lib/R,所以我编辑了/usr/lib/R/etc/Renviron。您显然需要管理员权限才能执行此操作。

【讨论】:

  • 我也有同样的问题。可以找到 Python 路径,但丢失了 Tensorflow 所需的 Numpy。如何为 Python 找到正确的路径并且不丢失 Numpy?
  • 非常感谢我的朋友。我正在寻找修复程序超过 3 天 :)
  • 在阅读了很多关于这个问题的问答后,这个答案对我有用!
【解决方案4】:

在 Mac OSX 上唯一对我有用的是,在终端中执行以下命令:

touch $HOME/.Renviron

然后打开它,我用的是vim,所以我的命令如下:

vim $HOME/.Renviron

添加以下内容(对于 anaconda):

RETICULATE_PYTHON="/anaconda3/bin/python"

否则,在终端输入:which python3 并输入你的输出路径

RETICULATE_PYTHON="your path from which python3"

【讨论】:

  • 非常感谢!!!有用!!我已经等了一年了!!!
  • 此解决方案也适用于 Ubuntu,非常感谢。您是否在 .Rprofile 中尝试过?所以选择取决于每个项目?
  • 在用 vim 打开文件之前,你绝对不需要touch。这是多余的。
【解决方案5】:

在你想使用的python环境中安装numpy

pip install numpy

我发现Reticulate 拒绝使用没有安装numpy 的python 版本。

我通过运行解决了这个问题:

library("reticulate")
py_discover_config()

Reticulate 跳过了列出的前两个 python 版本并使用了第三个。我注意到它打印出numpy 版本,所以它可能正在寻找它作为要求。 docs 中没有提到它,应该作为一个常见问题添加。

【讨论】:

    【解决方案6】:

    它对我有用:

    • Sys.setenv(RETICULATE_PYTHON = "C:\ProgramData\Anaconda3")
    • 图书馆(网状)
    • repl_python()

    【讨论】:

    • 这不可能像所写的那样工作,因为\P 不是 R 将识别的转义。您可能打算使用双反斜杠。
    【解决方案7】:

    您必须找到 .exe python 文件的路径,然后在 .Renviron 文件中指定它。

    最好的方法是为您的项目创建一个 conda 环境,然后将其指定为您的网状路径。

    library(reticulate)
    
    conda_create("environment name", packages = c("pandas", "matplotlib", "seaborn"), conda = "auto") # creates conda environment for your project
    
    conda_python("environment name") # returns the .exe python path for your environment
    

    为 .Renviron 文件保留此路径!!

    编辑 .Renviron 文件:

    library(usethis)
    
    edit_r_environ()
    

    然后,.Renviron 文件将打开。将.exe路径粘贴进去,如下:

    RETICULATE_PYTHON="YOUR ENVIRONMENT PATH/python.exe"
    

    记得用 / 而不是“\”粘贴它。

    重启 R 会话并使用以下命令检查是否一切正常:

    library(reticulate)
    
    py_config()
    

    如果一切正常,你应该得到类似的东西:

    python:你的环境路径/python.exe libpython:您的环境路径/python39.dll pythonhome:你的环境路径 版本:3.9.7(默认,2021 年 9 月 16 日,16:59:28)[MSC v.1916 64 位 (AMD64)] 架构:64位 numpy: 你的环境路径\lib\site-packages\numpy numpy_version: 1.21.2

    在此之后它应该可以工作:)

    【讨论】:

      【解决方案8】:

      对于windows用户,创建virtualenv python后:

      virtualenv python
      

      这可以使用 virtualenv

      Sys.setenv(RETICULATE_PYTHON = "python/Scripts/python.exe")
      library(reticulate)
      py_config()
      

      编辑: 这适用于任何路径,例如

      Sys.setenv(RETICULATE_PYTHON = "C:/Users/UserA/Anaconda3/envs/myEnv/python.exe")
      

      为避免每次都必须这样做,请将 Sys.setenv 行添加到 RProfile:

      file.edit(file.path("~", ".Rprofile"))
      file.edit(".Rprofile")
      

      【讨论】:

        猜你喜欢
        • 2016-11-18
        • 2015-09-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-10-11
        • 1970-01-01
        相关资源
        最近更新 更多