【发布时间】:2020-01-21 13:29:50
【问题描述】:
每当我在 RStudio 中使用 reticulate 时,默认的 REPL 是使用 python2.7,但我想默认使用 python3。
我已在环境变量RETICULATE_PYTHON 中将python3 的python 路径添加到我的.bashrc 中,当我使用R 并从命令行进行网状化时,Sys.getenv('RETICUALTE_PYTHON') 返回/usr/bin/python3。如果使用在命令行中打开 REPL,我会得到正确的路径。如果我在 RStudio 中做同样的事情,我会得到一个空字符串。
R
Sys.getenv('RETICULATE_PYTHON')
在 R 中返回(从命令行):
[1] "/usr/bin/python3"
在 RStudio 中:
[1] ""
在 RStudio 终端中,输出是正确的:
echo $RETICULATE_PYTHON
/usr/bin/python3
另外,当我从命令行启动 R 时,py_config() 是这样的:
> 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.7 (default, Oct 22 2018, 11:32:17) [GCC 8.2.0]
numpy: /usr/lib/python3/dist-packages/numpy
numpy_version: 1.14.5
NOTE: Python version was forced by RETICULATE_PYTHON
但在 RStudio 中是这样的:
> library(reticulate)
> py_config()
python: /usr/bin/python
libpython: /usr/lib/python2.7/config-x86_64-linux-gnu/libpython2.7.so
pythonhome: /usr:/usr
version: 2.7.15+ (default, Oct 2 2018, 22:12:08) [GCC 8.2.0]
numpy: /usr/lib/python2.7/dist-packages/numpy
numpy_version: 1.14.5
python versions found:
/usr/bin/python
/usr/bin/python3
重新启动 RStudio 没有帮助。有关如何使 RStudio 也使用正确的 python 二进制文件的任何建议?
【问题讨论】:
-
看起来 RStudio 仍在您的 PATH 中加载 python 版本。试试这里的提示:rstudio.github.io/reticulate/articles/versions.html
-
没错,通常设置 RETICULATE_PYTHON 变量可以解决这个问题,但由于某种原因它不起作用。当然我可以在每次使用 reticulate 的时候设置路径,但这太麻烦了
-
在
.bashrc中设置环境变量和在.Rprofile中设置的效果一样吗? -
您是否尝试过将
export RETICULATE_PYTHON=/usr/bin/python3添加到.profile,基于help.ubuntu.com/community/EnvironmentVariables :Shell config files such as ~/.bashrc, ~/.bash_profile, and ~/.bash_login are often suggested for setting environment variables. While this may work on Bash shells for programs started from the shell, variables set in those files are not available by default to programs started from the graphical environment in a desktop session. -
虽然所有选项(.bashrc、.profile、.Renviron)都适用于命令行中的 R,但仅添加行
Sys.setenv('RETICULATE_PYTHON'='/usr/bin/python3')适用于 RStudio
标签: r rstudio reticulate