我在启动我的 rstudio 会话时运行的第一行是:
library(reticulate)
use_python("/usr/local/lib/python3.6/site-packages")
但是,当我运行py_config()
它时,它仍显示为仍在使用默认的 python 2.7 安装。
这是一个问题,因为我无法导入为 python3 安装的任何模块。知道为什么这不起作用吗?我非常密切地关注文档。
我在启动我的 rstudio 会话时运行的第一行是:
library(reticulate)
use_python("/usr/local/lib/python3.6/site-packages")
但是,当我运行py_config()
它时,它仍显示为仍在使用默认的 python 2.7 安装。
这是一个问题,因为我无法导入为 python3 安装的任何模块。知道为什么这不起作用吗?我非常密切地关注文档。
我观察到 .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 交互窗口等。
它对我有用:
Sys.setenv(RETICULATE_PYTHON = "/usr/bin/python3")
library(reticulate)
在第一次使用 reticulate 之前设置 RETICULATE_PYTHON 似乎很重要。
use_python("path/to/python3")
肯定不行,虽然网状Python版本配置文章是这么说的。不要相信!:-)
我试图用当前的网状版本(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
幸运的是,将.Renviron
包含该行的文件RETICULATE_PYTHON="/path/to/python3"
放入用户的主目录确实有效:
> 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 解释器。它通常位于etc
R 主目录的子目录中。R.home()
您可以通过在 R 解释器中运行该函数来找出 R 的家在哪里。就我而言(Ubuntu 18.04.3 LTS)它是/usr/lib/R
,所以我编辑了/usr/lib/R/etc/Renviron
. 您显然需要管理员权限才能执行此操作。
在 Mac OSX 上唯一对我有用的是,在终端中执行以下命令:
touch $HOME/.Renviron
然后打开它,我使用vim,所以我的命令如下:
vim $HOME/.Renviron
添加以下内容(对于 anaconda):
RETICULATE_PYTHON="/anaconda3/bin/python"
否则,在终端类型:which python3
并输入您的输出路径
RETICULATE_PYTHON="your path from which python3"
安装numpy
在您希望使用的 python 环境中。
pip install numpy
我发现 Reticulate 拒绝使用尚未numpy
安装的 python 版本。
我通过运行解决了这个问题:
library("reticulate")
py_discover_config()
Reticulate 跳过了列出的前两个 python 版本并使用了第三个。我注意到它打印出了numpy
版本,所以它可能正在寻找它作为要求。文档中没有提到它,可能应该作为一个常见问题添加。
它对我有用:
对于 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")
您必须找到 .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
在此之后它应该工作:)