首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >网络环境的动态变化

网络环境的动态变化
EN

Stack Overflow用户
提问于 2019-01-18 15:22:57
回答 1查看 389关注 0票数 1

是否可以通过网络动态地改变conda环境?

代码语言:javascript
复制
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

目前,我在这里得到一个导入错误:

代码语言:javascript
复制
package2 = import('pack2')

ModuleNotFoundError:没有名为pack2的模块

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-05-12 11:35:45

您正面临这个问题,因为reticulate可以而不是在单个R会话中更改python解释器。您可以使用ModuleNotFoundError: No module named pack2,因为reticulate仍然在使用没有pack2env1。试一试:

代码语言:javascript
复制
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会话中运行一样:

代码语言:javascript
复制
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))

您应该能够在单个会话中运行用于env1env2pack2的代码,而不会出现任何问题。

注意:匿名函数将拥有自己的环境,为了从全局环境访问变量,需要将它们作为参数传递给函数(虽然您可能可以传递全局环境本身,但我没有尝试)。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54256889

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档