python - 如何从 python 子进程运行 anaconda
问题描述
我正在尝试在 python 中创建激活 conda env 然后运行 shell 脚本的子进程。为了实现这一点,我正在做以下事情
subprocess.call("""conda activate r_conda && Rscript -e 'rmarkdown::render("test.Rmd")'""", shell=True, executable="/bin/bash")
但是,我收到以下错误
CommandNotFoundError:您的 shell 未正确配置为使用“conda activate”。
但是,我可以通过在 test.sh 文件中移动 shell 脚本中的代码来实现这一点。
conda activate r_conda
Rscript -e 'rmarkdown::render("test.Rmd")'
然后我可以运行以下代码
subprocess.call("""bash -i test.sh""", shell=True)
那么任何人如何在不编写shell脚本的情况下做到这一点?
解决方案
您需要设置运行 conda 所需的环境。(这是通过初始化脚本完成的,就像.bash_profile
在命令行上运行它一样)
也许尝试添加这个:eval "$(conda shell.bash hook)"
subprocess.call("""eval "$(conda shell.bash hook)" && conda activate r_conda && echo $CONDA_DEFAULT_ENV""", shell=True, executable="/bin/bash")
这应该打印出您的 Conda 环境名称 - r_conda
。
推荐阅读
- jquery - 如何在jquery中添加类和删除类?
- ansible - 如何将 ansible_query 结果传递给 included_task
- installation - 如何使用高级安装程序将字体添加到 Windows 字体文件夹?
- ascii - Hexdump 的最佳 OCR
- html - 当materializecss中的面包屑超过屏幕长度以仅留下最终的面包屑时,如何截断它们的开头?
- javascript - 需要有关 css 文件的 webpack 配置的帮助,因为在更改 css 文件中的任何内容时它不会刷新
- node.js - 节点模块 googleapis 导致问题
- javascript - Javascript,尝试在 while 循环中添加线闸
- python - cannot import name 'Input' from 'tensorflow.keras.models'
- java - How do I create a unit test for a constructor with Random class in java