在R脚本内激活Conda环境

14ifxucb  于 2022-12-06  发布在  其他
关注(0)|答案(1)|浏览(295)

我是R编码新手。
我想运行一个从Python脚本调用的R脚本。
Python脚本将使用Conda环境env 1,而R脚本将在Linux中使用不同的Conda环境env 2。
因此,我在运行python脚本之前激活了env 1:conda activate /condaenv/env1/
然后运行python脚本python testpy.py(此python脚本将调用R脚本testr.R)。
我的python脚本(testpy.py)如下:

import subprocess
subprocess.call(['Rscript','testr.R','hello'])

我的Rscript testr.R将如下所示:

#!/condaenv/env2/bin/Rscript
library(Peaks)
library(httr)

我想从/condaenv/env 2导入testr.R脚本内的所有R库。
但我不知道***R脚本如何激活Conda环境(env 2),以及R脚本是否会使用安装在env 2中的软件包运行?***

mzmfm0qo

mzmfm0qo1#

关于标题(“* 在R脚本中激活Conda环境 *”)的注意事项,正如您在执行python脚本之前激活python env一样,应在调用R脚本之前激活R环境。
设置2个conda环境,并使用conda run执行Python脚本和从Python调用R:

孔达环境
# base python env:
conda create -n conda_python -c conda-forge python
# base r env + httr:
conda create -n conda_r -c conda-forge r-base r-httr
测试脚本

第一次

正在执行testpy.py

(when conda_python是当前未激活的环境)

# conda run -n conda_python python testpy.py
CONDA_PREFIX (py) : /home/marguslt/miniconda3/envs/conda_python
-- R --
CONDA_PREFIX (R)  : /home/marguslt/miniconda3/envs/conda_r
R .libPaths()     : /home/marguslt/miniconda3/envs/conda_r/lib/R/library
Questions in SO : 23249251
另一种方法是使用conda嵌套激活:

py脚本替换为:

# testpy_noconda.py

import os
import subprocess
print('CONDA_PREFIX (py) :', os.environ['CONDA_PREFIX'])
subprocess.call(['Rscript', 'testr.R'] )

使用--stack选项激活两个环境并运行testpy_noconda.py

(base): conda activate conda_python
(conda_python): conda activate --stack conda_r
(conda_r): python testpy_noconda.py
CONDA_PREFIX (py) : /home/marguslt/miniconda3/envs/conda_r
-- R --
CONDA_PREFIX (R)  : /home/marguslt/miniconda3/envs/conda_r
R .libPaths()     : /home/marguslt/miniconda3/envs/conda_r/lib/R/library
Questions in SO : 23249325

使用环境:

(conda_r): env | grep CONDA_
CONDA_EXE=/home/marguslt/miniconda3/bin/conda
CONDA_PYTHON_EXE=/home/marguslt/miniconda3/bin/python
CONDA_SHLVL=3
CONDA_PREFIX=/home/marguslt/miniconda3/envs/conda_r
CONDA_DEFAULT_ENV=conda_r
CONDA_PROMPT_MODIFIER=(conda_r)
CONDA_PREFIX_1=/home/marguslt/miniconda3
CONDA_PREFIX_2=/home/marguslt/miniconda3/envs/conda_python
CONDA_STACKED_3=true

相关问题