前言
这个应该是很久我就遇见的问题,后来我解决了,但是后来帮壮壮学长学生解决问题的时候又出来了,所以这一次便记录一下是如何解决的。
主要就是安装了anaconda之后,vs code里面自动启动anaconda总是出错。
这个问题本质上是 Windows PowerShell 的执行策略(Execution Policy)阻止了 Anaconda 的初始化脚本运行,导致 conda 没有被正确加载。其实就是 VSCode + PowerShell + Conda 常见问题。
正文
1. 问题现象
正常来说,anaconda一般会在vscode版本切换的时候启动如下的脚本:
(E:\anaconda\shell\condabin\conda-hook.ps1) ; (conda activate AMchat)但是我们遇见了如下的报错
PS C:\Users\USTBLX\Downloads\AI agent> (E:\anaconda\shell\condabin\conda-hook.ps1) ; (conda activate AMchat) E:\anaconda\shell\condabin\conda-hook.ps1 :
无法加载文件 E:\anaconda\shell\condabin\conda-hook.ps1,因为在此系统上禁止运行脚本。有关详细信息,请参阅 https:/go.microsoft.com/fwlink/?LinkID=135170 中的 ab out_Execution_Policies。 所在位置 行:1 字符: 2 + (E:\anaconda\shell\condabin\conda-hook.ps1) ;
(conda activate AMchat) + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : SecurityError: (:) [],PSSecurityException + FullyQualifiedErrorId : UnauthorizedAccess
conda : 无法将“conda”项识别为 cmdlet、函数、脚本文件或可运行程序的名称。请检查名称的拼写,如果包括路径,请确保路径正确,然后再试一次。 所在位置 行:1 字符: 48 + (E:\anaconda\shell\condabin\conda-hook.ps1) ; (conda activate AMchat) + ~~~~~ + CategoryInfo : ObjectNotFound: (conda:String) [], CommandNotFoundException + FullyQualifiedErrorId : CommandNotFoundException报错信息:
无法加载文件 E:\anaconda\shell\condabin\conda-hook.ps1,因为在此系统上禁止运行脚本。
PSSecurityException: UnauthorizedAccess随后 conda 也无法识别:
conda : 无法将“conda”项识别为 cmdlet、函数、脚本文件或可运行程序的名称2. 问题原因
VSCode 默认使用 PowerShell 作为终端,而 PowerShell 有脚本执行策略(Execution Policy)限制。
Anaconda 在初始化环境时会调用一个 PowerShell 脚本:
conda-hook.ps1但是当前系统的 PowerShell 执行策略不允许执行 .ps1 脚本,因此:
conda-hook.ps1被 安全策略拦截Anaconda 初始化失败
conda命令没有被加载到当前 shell
所以就出现:
conda : CommandNotFoundException我们可以运行如下命令:
Get-ExecutionPolicy -List得到当前的用户确实没有允许脚本执行的策略 CurrentUser: Undefined :
Scope ExecutionPolicy
MachinePolicy Undefined
UserPolicy Undefined
Process Undefined
CurrentUser Undefined
LocalMachine Undefined说明 当前用户没有允许脚本执行的策略。
3. 解决办法
设置当前用户允许执行本地脚本:
Set-ExecutionPolicy -Scope CurrentUser -ExecutionPolicy RemoteSigned然后确认 CurrentUser 的权限:
Get-ExecutionPolicy -List结果:
CurrentUser RemoteSigned4. 什么是RemoteSigned
RemoteSigned 的含义是:
而 conda-hook.ps1 属于 本地脚本,因此允许执行。
5. 为什么这样就能解决问题
当 PowerShell 允许执行脚本后:
conda-hook.ps1可以正常运行,它会:
初始化 Conda 环境变量
注册
conda命令允许
conda activate切换环境
因此 VSCode 终端中的 Conda 环境恢复正常。
总结
该问题是由于 PowerShell 默认禁止执行脚本,导致 Anaconda 的 conda-hook.ps1 无法运行,从而 conda 命令未被加载。
通过设置 PowerShell 执行策略为 RemoteSigned,允许本地脚本执行即可解决。
然后就解决了的喵~!
参考
[1] ChatGPT