每当我在项目文件夹中启动 Powershell 会话时,如何激活 conda 环境?

How can I activate a conda environment whenever I start a Powershell session in a project folder?

我使用 Anaconda environments 来管理我的 Python 安装。 我将 Python 项目组织在文件夹中;每个文件夹都包含一个项目的代码和一个文件 environments.yml,该文件指定 conda 环境应该 运行 特定 Python 项目的包。

我通常是这样开始一个项目的:

  1. 我导航到项目文件夹(在 Total Commander 中,但我认为这无关紧要)。
  2. 我看一下environment.yml文件的内容,看看这个项目需要用到什么conda环境
  3. 我在文件夹中启动一个 Powershell 会话,并使用 conda activate some_env_name 在 Powershell 中激活 conda 环境。
  4. 我开始其余的程序,例如jupyter labspyder.

我觉得第 2 步和第 3 步应该是自动的,但我该怎么做呢?

在尝试了各种方法后,我在我的 profile.ps1 文件中选择了一个函数,该函数在我每次启动新的 powershell 会话时都会被触发。

该函数从 environment.yml 文件中读取环境名称并尝试激活该环境:

function conda_here {
  $first_line = Get-Content -Head 1 environment.yml  # This returns "name: conda_env_name"
  $env_name = $first_line.Split(": ")[-1]  # This splits it into an array of [name, : , conda_env_name] and takes the last element
  try {
    conda activate $env_name
  } catch {
    Write-Host "Tried to activate environment $env_name, but failed." -ForeGroundColor Red
  }
}

为了让该函数在每次 powershell 启动时触发,我在函数定义后添加了以下内容:

# Activate a conda environment when started in a dir with a .conda-env file
if ( Test-Path environment.yml ){
  conda_here 
}

现在,每当我在包含 environment.yml 文件的文件夹中启动 powershell 会话时,相应的 conda 环境就会自动激活。