零、前言

原来的方案可以实现在PowerShell启动后自动进入conda环境,但是这样的缺点也很明显,会大幅度拖慢PowerShell启动的速度,这也是本篇重点解决的痛点。


一、配置环境变量

在Windows底部任务栏的搜索中搜索 查看高级系统设置,打开后在弹出是页面中选择 环境变量

image-20250225125126357

接下来可以看到如下页面,我们需要分别修改 用户变量系统变量中的 Path变量(理论上来说修改系统变量就行了,这里为了保险起见两个都改一下):

image-20250225124933970

由于用户变量和系统变量的修改步骤相同,此处以系统变量为示范。在上图中选中 Path并点击 编辑后,来到如下页面:image-20250225125845112

按照图中顺序操作。其中,Anaconda3的安装路径需自行修改,图中展示的为默认安装路径。

接下来依次通过 确定关闭打开的环境变量及高级系统设置页面,注意,每一个都需要点击确定,否则修改不会生效。


二、PowerShell设置

重启PowerShell,输入以下命令:

 conda init powershell

初始化完成后,输入以下命令,修改PowerShell限制策略:

 Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser

输入以下命令,取消一打开终端就默认进入conda的base环境:

 conda config --set auto_activate_base false

三、修改PowerShell配置文件

重启PowerShell,输入以下命令查看配置文件路径:

 $PROFILE

会显示你的配置文件的位置,比如:

 C:\Users\用户名\Documents\PowerShell\Microsoft.PowerShell_profile.ps1

在文件资源管理器中进入上述路径,可能只会发现一个名为 profile.ps1的配置文件:

image-20250225131632009

没错,这就是我们需要找到的文件,换句话来说,文件名似乎不影响它在PowerShell中生效。可以使用记事本或者诸如VSCode之类的编辑器打开 profile.ps1,可以看到类似如下内容:

 #region conda initialize
 # !! Contents within this block are managed by 'conda init' !!
 If (Test-Path "C:\ProgramData\anaconda3\Scripts\conda.exe") {
     (& "C:\ProgramData\anaconda3\Scripts\conda.exe" "shell.powershell" "hook") | Out-String | ?{$_} | Invoke-Expression
 }
 #endregion

现在,让我们把 profile.ps1复制一份,重命名为 conda.ps1备用,然后将 profile.ps1中的有效内容注释掉,就像下面这样:

 #region conda initialize
 # !! Contents within this block are managed by 'conda init' !!
 # If (Test-Path "C:\ProgramData\anaconda3\Scripts\conda.exe") {
 #     (& "C:\ProgramData\anaconda3\Scripts\conda.exe" "shell.powershell" "hook") | Out-String | ?{$_} | Invoke-Expression
 # }
 #endregion

现在回到刚才复制的 conda.ps1,将注释部分删除,保留if语句中的内容:

 If (Test-Path "C:\ProgramData\anaconda3\Scripts\conda.exe") {
     (& "C:\ProgramData\anaconda3\Scripts\conda.exe" "shell.powershell" "hook") | Out-String | ?{$_} | Invoke-Expression
 }

保存后,将 conda.ps1移动到PowerShell的启动目录,一般为 C:\Users\用户名>,就像下面这样:

image-20250225133756483


四、验证结果

接下来重启PowerShell,在终端中输入以下命令,如果能正常输出版本号,说明修改完成:

 conda --version

image-20250225134050964

The best code is no code at all.