提问者:小点点

使用子流程激活conda环境


我正在寻找熊猫的版本:

def check_library_version():
    print("Checking library version")
    subprocess.run(f'bash -c "conda activate {ENV_NAME};"', shell=True)
    import pandas
    pandas.__version__

期望输出:1.1。3.

输出:

检查库版本

CommandNotFoundError:您的shell未正确配置为使用“conda activate”。要初始化shell,请运行

$ conda init <SHELL_NAME>

当前支持的shell有:

  • bash

有关更多信息和选项,请参阅“conda init--help”。

重要提示:在运行“conda init”后,您可能需要关闭并重新启动shell。

为了澄清,我不寻求更新当前运行脚本的环境;我只想简单地激活该环境,并找出其中安装了哪个熊猫版本。


共1个答案

匿名用户

这毫无意义;子流程终止时,您激活的Conda环境将终止。

在运行任何Python代码之前,您应该(conda init和)conda激活您的虚拟环境。

如果您只想激活,请将一个简单的Python脚本作为当前Python的子进程运行,然后在虚拟环境之外继续使用当前脚本,尝试以下操作

subprocess.run(f"""conda init bash
    conda activate {ENV_NAME}
    python -c 'import pandas; print(pandas.__version__)'""",
    shell=True, executable='/bin/bash', check=True)

这只是将输出打印给用户;如果Python程序想要接收它,则需要添加正确的标志;

check = subprocess.run(...whatever..., text=True, capture_output=True)
pandas_version = check.stdout

(不幸的是,没有conda init sh;我认为上面的任何内容都不依赖于executable='/bin/bash'。也许有一种方法可以在POSIXsh中运行它并放弃bash要求。)