使用子进程激活conda环境

Ish*_*ema 6 python virtualenv conda

我正在尝试查找 pandas 的版本:

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

期望输出:1.1.3

输出:

检查库版本

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

$ conda init <SHELL_NAME>
Run Code Online (Sandbox Code Playgroud)

目前支持的 shell 有:

  • 巴什
  • tcsh
  • 克森什
  • 桀骜
  • 电源外壳

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

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

需要澄清的是,我并不是要更新当前运行脚本的环境;而是要更新当前运行脚本的环境。我只是想简单地激活该环境并找出那里安装了哪个 Pandas 版本。

tri*_*eee 3

这根本没有任何意义;当子进程终止时,您激活的 Conda 环境也会终止。

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

如果您只想激活,请运行一个简单的 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)
Run Code Online (Sandbox Code Playgroud)

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

check = subprocess.run(...whatever..., text=True, capture_output=True)
pandas_version = check.stdout
Run Code Online (Sandbox Code Playgroud)

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