零、前言
原来的方案可以实现在PowerShell启动后自动进入conda环境,但是这样的缺点也很明显,会大幅度拖慢PowerShell启动的速度,这也是本篇重点解决的痛点。
一、配置环境变量
在Windows底部任务栏的搜索中搜索 查看高级系统设置
,打开后在弹出是页面中选择 环境变量
:
接下来可以看到如下页面,我们需要分别修改 用户变量
和 系统变量
中的 Path
变量(理论上来说修改系统变量就行了,这里为了保险起见两个都改一下):
由于用户变量和系统变量的修改步骤相同,此处以系统变量为示范。在上图中选中 Path
并点击 编辑
后,来到如下页面:
按照图中顺序操作。其中,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
的配置文件:
没错,这就是我们需要找到的文件,换句话来说,文件名似乎不影响它在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\用户名>
,就像下面这样:
四、验证结果
接下来重启PowerShell,在终端中输入以下命令,如果能正常输出版本号,说明修改完成:
conda --version