[解决]Win10 VS Code pipenv无法加载文件Scripts\Activate.ps1,因为在此系统上禁止运行脚本-更改执行策略

问题描述

我在某个项目里使用了pipenv虚拟环境,当我在VS Code中右键该项目的文件-在集成终端中打开,就会爆出下面的错误 - & : 无法加载文件 C:\Users\Kearney\.virtualenvs\fb-xzc3iOtr\Scripts\Activate.ps1,因为在此系统上禁止运行脚本。有关详细信息,请参阅 https:/go.micros oft.com/fwlink/?LinkID=135170 中的 about_Execution_Policies。
在这里插入图片描述

解决办法

PowerShell:因为在此系统上禁止运行脚本,解决方法 - sinler中可以知道问题的根源在于win10默认的执行策略是不载入任何配置文件,不运行任何脚本。这一点可以通过命令行查看

查看当前执行策略

在控制台敲入命令get-executionpolicy回车即可,默认是Restricted


> get-executionpolicy
Restricted

可以加上参数-Scope CurrentUser表示当前用户,默认是本机

参数详解

Windows10 virtualenv无法加载文件ctivate.ps1,因为在此系统上禁止运行脚本 - 万墨

– Restricted: 不载入任何配置文件,不运行任何脚本。 “Restricted” 是默认的。
– AllSigned: 只有被Trusted publisher签名的脚本或者配置文件才能使用,包括你自己再本地写的脚本。
– RemoteSigned: 对于从Internet上下载的脚本或者配置文件,只有被Trusted,publisher签名的才能使用。
– Unrestricted: 可以载入所有配置文件,可以运行所有脚本文件. 如果你运行一个从internet下载并且没有签名的脚本,在运行之前,你会被提示需要一定的权限。
– Bypass: 所有东西都可以使用,并且没有提示和警告。
– Undefined: 删除当前scope被赋予的ExecutionPolicy,但是Group Policy scope的Execution Policy不会被删除。

修改执行策略

.涉及到注册表问题,这里必须“以管理员身份运行”选项启动 Windows PowerShell

格式:

  • Set-ExecutionPolicy 参数:设置全局执行策略为参数
  • Set-ExecutionPolicy 参数 -Scope CurrentUser:设置当前用户执行策略为参数
    例子
> Set-ExecutionPolicy  AllSigned
> Set-ExecutionPolicy -Scope CurrentUser Unrestricted

解决办法

实践表明,仅设置当前用户的执行策略不需要管理员身份的powershell,在vs code的集成终端就能解决

> Set-ExecutionPolicy -Scope CurrentUser RemoteSigned

实践表明:AllSigned参数不能解决问题,RemoteSigned才解决了这个问题,带来的好处就是省掉了每次进入环境都需要敲一次pipenv shell.

参考

<think>我们遇到了一个PowerShell执行策略的问题。错误信息表明系统当前禁止运行脚本。这是因为PowerShell的默认执行策略(Execution Policy)是Restricted,它不允许运行任何脚本解决方案: 1. 临时更改执行策略(仅当前会话有效): 在PowerShell运行:`Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope Process` 2. 永久更改执行策略(需要管理员权限): 以管理员身份运行PowerShell,然后执行: `Set-ExecutionPolicy RemoteSigned` 3. 如果不想更改执行策略,也可以使用以下方法运行激活脚本: `.\.venv\Scripts\Activate.ps1` (注意前面有一个点和一个空格,表示在当前作用域运行) 但是,由于错误信息中已经给出了具体的路径,我们可以尝试使用第三种方法,或者更改执行策略。 这里我们选择临时更改执行策略的方法,因为这样不会影响系统的全局设置,而且只对当前PowerShell会话有效。 具体步骤: 在当前的PowerShell窗口中,先执行以下命令来临时设置执行策略为RemoteSigned(允许本地脚本运行,远程脚本需要数字签名): ```powershell Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope Process ``` 然后再次尝试激活虚拟环境: ```powershell .\.venv\Scripts\Activate.ps1 ``` 注意:如果虚拟环境激活成功,命令行提示符前面会显示虚拟环境的名称,如:`(.venv) PS ...` 如果问题仍然存在,请检查脚本是否被阻塞(可能需要右键点击脚本文件->属性->解除锁定)。 下面是一个完整的步骤示例: 假设我们当前在目录 `D:\cuban\code\IPC_UI` 下: ```powershell # 临时更改当前PowerShell会话的执行策略 Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope Process # 激活虚拟环境 .\.venv\Scripts\Activate.ps1 ``` 如果上述方法不可行,也可以使用命令提示符(cmd)来激活虚拟环境,因为命令提示符不受PowerShell执行策略的影响: 在同一个目录下,打开命令提示符(cmd),然后执行: ```cmd D:\cuban\code\IPC_UI\.venv\Scripts\activate.bat ``` 解释: - 在PowerShell中,执行策略是安全措施,防止恶意脚本运行- RemoteSigned策略允许运行本地创建的脚本,但运行从互联网下载的脚本时,需要数字签名。 - 由于我们的激活脚本是本地创建的,所以使用RemoteSigned策略即可运行。 如果您的组织有严格的安全策略,请咨询管理员。 另外,也可以考虑使用以下命令来绕过执行策略运行单个脚本(不推荐,因为可能存在安全隐患): ```powershell powershell -ExecutionPolicy Bypass -File "D:\cuban\code\IPC_UI\.venv\Scripts\Activate.ps1" ``` 但是,推荐使用第一种临时更改执行策略的方法。 现在,我们给出一个PowerShell脚本示例,用于自动设置执行策略并激活虚拟环境:</think>### PowerShell 执行策略错误分析与解决方案 您遇到的错误是由于 PowerShell 执行策略限制导致的。Windows 系统默认阻止运行未签名的脚本,包括 Python 虚拟环境的激活脚本。以下是详细解决方案: #### 解决方案 1:临时更改执行策略(推荐) ```powershell # 临时更改当前会话的执行策略 Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope Process # 然后激活虚拟环境 .\.venv\Scripts\Activate.ps1 ``` #### 解决方案 2:永久更改执行策略(需要管理员权限) ```powershell # 以管理员身份运行 PowerShell Set-ExecutionPolicy RemoteSigned -Force ``` #### 解决方案 3:使用命令提示符(CMD)代替 PowerShell ```cmd :: 在 CMD 中激活虚拟环境 D:\cuban\code\IPC_UI\.venv\Scripts\activate.bat ``` #### 解决方案 4:绕过执行策略(不推荐,仅用于测试) ```powershell # 使用 Bypass 参数临时绕过限制 powershell -ExecutionPolicy Bypass -File "D:\cuban\code\IPC_UI\.venv\Scripts\Activate.ps1" ``` ### 执行策略类型说明 | 策略类型 | 描述 | 安全等级 | |----------|------|----------| | Restricted | 默认策略禁止所有脚本运行 | ★★★★★ | | AllSigned | 只允许运行数字签名的脚本 | ★★★★☆ | | RemoteSigned | 本地脚本运行,远程脚本需签名 | ★★★☆☆ | | Unrestricted | 允许所有脚本运行 | ★☆☆☆☆ | | Bypass | 完全绕过所有限制 | ☆☆☆☆☆ | ### 完整解决方案脚本 ```powershell # 检查当前执行策略 $currentPolicy = Get-ExecutionPolicy Write-Host "当前执行策略: $currentPolicy" # 尝试临时更改策略 try { Set-ExecutionPolicy RemoteSigned -Scope Process -Force -ErrorAction Stop Write-Host "执行策略已临时更改为 RemoteSigned" # 激活虚拟环境 .\.venv\Scripts\Activate.ps1 # 验证激活 if ($env:VIRTUAL_ENV) { Write-Host "虚拟环境激活成功: $env:VIRTUAL_ENV" Write-Host "Python 路径: $(Get-Command python).Source" } else { Write-Host "激活失败,请检查路径" } } catch { Write-Host "错误: $_" Write-Host "尝试使用 CMD 激活..." Start-Process cmd -ArgumentList "/c", "`.\.venv\Scripts\activate.bat" -Wait } ``` ### 最佳实践建议 1. **项目启动脚本** - 创建 `start.ps1` 文件自动处理环境设置: ```powershell # start.ps1 param([switch]$Admin) if (-not $env:VIRTUAL_ENV) { try { .\.venv\Scripts\Activate.ps1 } catch { if ($Admin) { Start-Process powershell -ArgumentList "-ExecutionPolicy Bypass -File `"$PSCommandPath`" -Admin" -Verb RunAs } else { Write-Warning "使用管理员权限重试: .\start.ps1 -Admin" } } } # 启动主应用 python main.py ``` 2. **虚拟环境配置优化** - 在 `pyvenv.cfg` 中添加: ```ini home = C:\Python39 include-system-site-packages = false version = 3.9.6 ``` ### 常见问题解决 ```powershell # 问题1文件被阻止 Unblock-File -Path .\.venv\Scripts\Activate.ps1 # 问题2:脚本签名 Set-AuthenticodeSignature -FilePath .\.venv\Scripts\Activate.ps1 -Certificate (Get-ChildItem cert:\CurrentUser\My -CodeSigningCert)[0] # 问题3:组策略限制 Get-ItemProperty HKLM:\SOFTWARE\Policies\Microsoft\Windows\PowerShell ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值