子进程从 python 脚本激活 conda 环境

子进程从 python 脚本激活 conda 环境

我正在使用一个 python 程序,该程序使用 conda 在单独的变量中安装的一些模块。因此,在运行脚本之前,我从 unix shell 调用以下命令来获取环境:

conda activate my-rdkit-env

是否可以在我的 python 脚本中调用它?我尝试按照以下方式进行操作,但没有成功

import subprocess
subprocess.run('conda init bash', shell=True)
#subprocess.run('conda activate my-rdkit-env', shell=True)

答案1

这个答案您应该能够直接从环境中执行脚本,这将使您在工作环境中执行其他代码时无需激活和停用环境。

process = subprocess.Popen(
    "conda run -n ${CONDA_ENV_NAME} python script.py".split(), , stdout=subprocess.PIPE
)
output, error = process.communicate()

答案2

https://github.com/conda/conda/issues/9296

Conda init 将 conda 注册为 shell 函数,您需要让该位初始化您的 shell 才能进行激活。你可以做类似的事情

. $CONDA_PREFIX/etc/profile.d/conda.sh && conda activate test4 && conda env list

例如:

import subprocess
cmd = '. $CONDA_PREFIX/etc/profile.d/conda.sh && conda activate my-rdkit-env' 
subprocess.call(cmd, shell=True, executable='/bin/bash')

笔记:

如果运行此代码时您已经处于不同的 conda 环境中,$CONDA_PREFIX则会为您提供该环境中的前缀。要获得基础版本,只需打开终端并输入$CONDA_PREFIX。然后替换$CONDA_PREFIX为提示给您的内容(通常类似于/home/user/anaconda3)。

相关内容