在网状结构中动态改变 conda 环境
Dynamically change conda environment in reticulate
是否可以通过reticulate动态改变conda环境?
use_condaenv(condaenv='env1', conda='/path/to/conda')
package1 = import('pack1')
package1$do_smth
use_condaenv(condaenv='env2', conda='/path/to/conda')
package2 = import('pack2')
package2$do_smth2
目前我在此处遇到导入错误:
package2 = import('pack2')
ModuleNotFoundError: No module named pack2
您遇到问题是因为 reticulate
不能 不能 在单个 R 会话中更改 python 解释器。你得到 ModuleNotFoundError: No module named pack2
因为 reticulate
仍在使用 env1
而没有 pack2
。试试看:
use_condaenv(condaenv='env1', conda='/path/to/conda')
use_condaenv(condaenv='env2', conda='/path/to/conda', required = TRUE) # should throw an error
作为解决方法,您可以使用 callr
包到 运行 python 代码,就像在独立 R 会话中 运行ning 一样:
library(callr)
# change variables accordindly:
venv <- "env2" # env1 or env2
# (optional) a python script containing a function which you would like to run from R
python_script_path <- "some_python_script.py"
# (optional)
some_other_parameter <- "foobar"
result <- r(function(venv, python_script_path, some_other_parameter){
library(reticulate)
use_condaenv(venv, conda='/path/to/conda', required = T)
# try to import package
package = import('pack2') # pack1 or pack2
return(package$do_smth())
# (oprional) or even to source a python script
# source_python(python_script_path)
# run a python function which is sourced from `python_script_path`
# result <- run_calculations(some_other_parameter)
# return(result)
}, args = list(venv, python_script_path, some_other_parameter))
您应该能够 运行 此代码 env1
与 pack1
和 env2
与 pack2
在单个会话中没有问题。
注意:匿名函数将有它自己的环境,为了从全局环境访问变量,你需要将它们作为参数传递给函数(虽然你可能可以传递全局环境本身,但我没有'不要尝试那个)。
是否可以通过reticulate动态改变conda环境?
use_condaenv(condaenv='env1', conda='/path/to/conda')
package1 = import('pack1')
package1$do_smth
use_condaenv(condaenv='env2', conda='/path/to/conda')
package2 = import('pack2')
package2$do_smth2
目前我在此处遇到导入错误:
package2 = import('pack2')
ModuleNotFoundError: No module named pack2
您遇到问题是因为 reticulate
不能 不能 在单个 R 会话中更改 python 解释器。你得到 ModuleNotFoundError: No module named pack2
因为 reticulate
仍在使用 env1
而没有 pack2
。试试看:
use_condaenv(condaenv='env1', conda='/path/to/conda')
use_condaenv(condaenv='env2', conda='/path/to/conda', required = TRUE) # should throw an error
作为解决方法,您可以使用 callr
包到 运行 python 代码,就像在独立 R 会话中 运行ning 一样:
library(callr)
# change variables accordindly:
venv <- "env2" # env1 or env2
# (optional) a python script containing a function which you would like to run from R
python_script_path <- "some_python_script.py"
# (optional)
some_other_parameter <- "foobar"
result <- r(function(venv, python_script_path, some_other_parameter){
library(reticulate)
use_condaenv(venv, conda='/path/to/conda', required = T)
# try to import package
package = import('pack2') # pack1 or pack2
return(package$do_smth())
# (oprional) or even to source a python script
# source_python(python_script_path)
# run a python function which is sourced from `python_script_path`
# result <- run_calculations(some_other_parameter)
# return(result)
}, args = list(venv, python_script_path, some_other_parameter))
您应该能够 运行 此代码 env1
与 pack1
和 env2
与 pack2
在单个会话中没有问题。
注意:匿名函数将有它自己的环境,为了从全局环境访问变量,你需要将它们作为参数传递给函数(虽然你可能可以传递全局环境本身,但我没有'不要尝试那个)。