miniconda在powershell下无法激活

  1. 管理员方式打开powershell
  2. 执行命令:Set-Executionpolicy -executionpolicy remotesigned -scope localmachine
  3. 执行命令:conda init powershell

解读命令:Set-Executionpolicy -executionpolicy remotesigned -scope localmachine

这个PowerShell命令是用来修改 PowerShell 的执行策略(Execution Policy)的。执行策略是 PowerShell 的一项安全功能,它控制着是否可以运行脚本以及哪些脚本可以运行。这有助于防止恶意脚本在未经许可的情况下在系统上执行。下面是对这个命令各部分的详细解释:

  • Set-ExecutionPolicy: 这是 PowerShell 中的一个 cmdlet(命令行工具),用于更改当前用户、当前进程或本地计算机上的执行策略设置。

  • -ExecutionPolicy RemoteSigned: 这个参数指定了要设置的新执行策略。RemoteSigned 策略意味着你信任来自本地计算机(你自己的电脑或内部网络)的脚本可以自由运行,而从互联网或其他远程位置下载的脚本必须有数字签名才能运行。这样可以确保下载的脚本未被篡改,因为数字签名能验证脚本的来源和完整性。

  • -Scope LocalMachine: 这个参数指定了你想要应用该执行策略的范围。LocalMachine 指的是整个计算机范围,这意味着更改会影响到计算机上的所有用户。其他可用的范围还包括 Process(仅当前 PowerShell 进程)、CurrentUser(仅当前用户)和 User(已弃用,以前用于当前用户)。

综上所述,这个命令的作用是将本地计算机上的 PowerShell 执行策略设置为 RemoteSigned。这样设置后,本机脚本可以无限制地执行,而从远程来源获取的脚本文件在执行前需要有数字签名以确保其安全性。这对于既想保持系统安全又需要执行来自可信任远程源的脚本的用户来说是一个很好的平衡。

取消上述命令,恢复powershell默认设置

Set-ExecutionPolicy -ExecutionPolicy Default -Scope LocalMachine

解读命令: conda init powershell

这条命令修改了ps的配置文件: C:\Users\Logic\Documents\WindowsPowerShell\profile.ps1
内容如下:


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

这段 PowerShell 脚本主要用于在 PowerShell 环境中初始化 Miniconda。以下是脚本内容的逐行解释:

  1. #region conda initialize: 这是一个注释标记,用来指示脚本中与 Conda 初始化相关的代码块开始。这样的标记有助于代码管理和阅读,但对脚本的实际执行没有影响。

  2. # !! Contents within this block are managed by 'conda init' !!: 另一个注释,警告用户这个代码块的内容由 conda init 命令管理,手动修改可能会被后续的 conda init 命令覆盖。

  3. If (Test-Path "C:\Users\Logic\miniconda3\Scripts\conda.exe") { ... }: 这是一个条件判断语句,检查路径 "C:\Users\Logic\miniconda3\Scripts\conda.exe" 是否存在。这个路径通常是 Miniconda 或 Anaconda 安装目录下的 conda.exe 文件位置。如果文件存在,即 Conda 已安装,那么大括号内的命令将被执行。

  4. (& "C:\Users\Logic\miniconda3\Scripts\conda.exe" "shell.powershell" "hook") | Out-String | ?{$_} | Invoke-Expression;: 这一行比较复杂,它做了以下几件事:

    • & 是调用运算符,用于执行后面的命令或脚本。
    • "C:\Users\Logic\miniconda3\Scripts\conda.exe" "shell.powershell" "hook":这部分调用了 conda.exe,并传入两个参数:shell.powershellhook。这意味着它请求 Conda 生成特定于 PowerShell 的初始化脚本片段,以便正确配置 PowerShell 环境以使用 Conda。
    • | Out-String:将前面命令的输出转换为字符串形式,这在处理命令输出时很有用,特别是当输出需要进一步处理或打印时。
    • | ?{$_}:这是一个筛选操作,过滤掉空字符串或不希望的输出。?{$_} 是一个简写,表示“如果当前对象(即这一行)不为空,则保留”。
    • | Invoke-Expression;:最后,这个管道操作执行(Invoke)前面生成的字符串表达式。换句话说,它执行了由 conda.exe shell.powershell hook 命令生成的 PowerShell 命令,从而配置当前 PowerShell 会话以支持 Conda 命令。

脚本检查 Conda 是否安装在预期位置,如果安装了,则自动配置 PowerShell 环境,使得在该 PowerShell 会话中可以直接使用 Conda 的命令来管理虚拟环境、安装软件包等操作。

posted @ 2024-06-16 23:24  立体风  阅读(230)  评论(0)    收藏  举报