PowerShell执行策略阻止venv激活的根本原因是Windows默认Restricted策略禁止运行Activate.ps1脚本;验证用Get-ExecutionPolicy,临时解决推荐Set-ExecutionPolicy RemoteSigned -Scope CurrentUser。

PowerShell执行策略阻止venv激活
VSCode在Windows上默认用PowerShell做集成终端,而venv\Scripts\activate.ps1是PowerShell脚本,默认被系统拦截。你看到的红色报错“无法在此系统上运行脚本”,不是路径错、不是venv没建好,就是执行策略卡住了。
验证方式:在VSCode终端里执行Get-ExecutionPolicy,如果返回Restricted,就是它。
- 临时解决(推荐):在当前终端里先运行
Set-ExecutionPolicy RemoteSigned -Scope CurrentUser,只改当前用户权限,不需管理员身份 - 别用
Unrestricted或Bypass——它们绕过签名检查,调试时可能触发杀毒软件拦截 - 如果必须用管理员改全局策略,命令是
Set-ExecutionPolicy RemoteSigned -Scope LocalMachine,但要确认你真需要全局生效 - Mac/Linux用户不用操心这个,
source venv/bin/activate天然支持,但要注意终端shell类型(zsh/bash)是否匹配activate脚本语法
VSCode终端和编辑器解释器不一致
选了解释器,终端里却还在用全局Python,这是最隐蔽的权限错觉——你以为激活了venv,其实只是编辑器“以为”它该用那个解释器,终端压根没同步。
现象:右下角显示./venv/Scripts/python.exe,但终端里pip install requests装到了全局;或者import numpy在编辑器里标红,运行却正常。
立即学习“Python免费学习笔记(深入)”;
- 必须开启
"python.terminal.activateEnvironment": true,否则VSCode不会自动在终端执行activate.ps1或activate - Windows下手动激活仍要加点号:
. venv\Scripts\activate(注意.和空格),漏掉点号就只是cd进目录,没执行脚本 - 验证是否真生效:在终端里跑
pip -V,输出路径必须含venv字样;再跑python -c "import sys; print(sys.prefix)",结果应指向venv文件夹
macOS SIP导致调试失败
Mac上调试报PermissionError: [Errno 13] Permission denied,大概率不是你没给文件chmod +x,而是VSCode试图在/usr/bin或/System这类受SIP保护的路径下启动debugpy子进程。
哪怕python script.py能跑通,debug模式也会挂——因为调试器需要写临时文件、绑定端口、注入代码,这些操作被SIP拦住。
- 项目路径绝不能放在
/usr、/System、/bin下,挪到~/Documents或~/code即可 - 不要用
sudo code .启动VSCode——这会让整个编辑器运行在root上下文,反而触发更严苛的沙盒限制 - 检查
launch.json里的"cwd"字段,确保它指向项目根目录,而非系统路径 - 如果用了Homebrew安装的Python,确认
which python3返回的是/opt/homebrew/bin/python3这类非系统路径,避免混用
镜像源配置不当引发的权限连带问题
用pip config set global.index-url http://pypi.douban.com/simple/这种HTTP地址,会在某些企业网络或新版pip里触发SSL警告甚至拒绝连接,表现为pip install卡住或报CERTIFICATE_VERIFY_FAILED——看起来像权限问题,实则是证书校验失败。
- 国内镜像务必用HTTPS:
https://pypi.tuna.tsinghua.edu.cn/simple,不是http:// - 如果必须用HTTP源,得加
--trusted-host参数:pip install -i http://pypi.douban.com/simple --trusted-host pypi.douban.com requests - 全局配置写入
%APPDATA%\pip\pip.ini(Win)或~/.pip/pip.conf(Mac/Linux),别只靠命令行临时设置,否则venv里pip可能读不到 - 虚拟环境里修改pip源后,记得删掉
venv\pip-selfcheck.json(Win)或venv/pip-selfcheck.json(Mac/Linux),否则下次pip会因缓存校验失败而静默退出


















