PowerShell执行策略默认为Restricted,禁止直接运行.py文件;解决方法是使用python script.py显式调用解释器,或切换终端为Command Prompt/Git Bash,或临时设置Set-ExecutionPolicy RemoteSigned -Scope CurrentUser。

PowerShell执行策略阻止Python脚本运行
这是Windows上PowerShell的默认安全限制,不是Python或VSCode的问题。PowerShell默认策略为Restricted,连本地.py文件都不允许直接执行——哪怕你只是在终端里敲python script.py,只要终端是PowerShell(VSCode默认就是),就可能触发这个错误。
常见错误信息长这样:无法加载文件 C:\path\script.py,因为在此系统上禁止运行脚本。
- 检查当前策略:在VSCode终端里运行
Get-ExecutionPolicy,大概率返回Restricted - 临时绕过(推荐调试用):在当前终端里运行
Set-ExecutionPolicy RemoteSigned -Scope CurrentUser,仅对当前用户生效,且不需管理员权限 - 别用
Bypass或全局Unrestricted,风险高,而且VSCode重启后不一定保留 - 该设置不影响Python解释器本身,只影响PowerShell是否允许“作为脚本”调用
.py文件;而python script.py本质是调用python.exe并传参,严格来说不算“执行脚本”,但PowerShell旧版本(尤其是5.1)有时会误判
VSCode终端默认是PowerShell,不是CMD或Git Bash
很多人以为自己在“命令行”里,其实VSCode新开的集成终端默认启动的是PowerShell(尤其Win10/11),哪怕你装了Git Bash或WSL,它也不会自动切过去。
- 看终端标题栏右上角,写着
PowerShell就确认了 - 快捷切换方式:终端右上角「+」号旁下拉菜单,选
Command Prompt或Git Bash,它们没有执行策略限制 - 永久改默认终端:按
Ctrl+Shift+P→ 输入Terminal: Select Default Profile→ 选你要的shell(比如Command Prompt) - 注意:改完后已打开的终端不会自动切换,要新建一个才生效
Python路径和shebang在Windows下基本无效
有人想加#!/usr/bin/env python或改文件关联来绕过,这在Windows PowerShell里没用。
立即学习“Python免费学习笔记(深入)”;
- PowerShell不读shebang,只认
.ps1、.bat、.cmd等扩展名对应的执行策略 -
.py文件在Windows注册表里默认关联到python.exe,但PowerShell执行时仍走自己的策略检查,不是靠文件关联 - 双击
.py能运行,不代表终端里.\script.py能运行——后者被PowerShell当作脚本对待,前者是Windows Shell调用关联程序 - 所以别折腾
assoc或ftype,解决不了终端报错
最稳的日常方案:显式调用python.exe
不依赖PowerShell对.py文件的执行许可,直接让Python解释器干活,一劳永逸。
- 在终端里统一用
python script.py或python .\script.py,而不是.\script.py - VSCode里如果配置了
launch.json,确保configurations[].program指向具体.py路径,而不是靠终端自动解析 - 如果脚本需要传参,
python script.py --arg value安全可靠;而.\script.py --arg value依然可能被拦截 - 这条规则也适用于其他可执行脚本(比如
.js用node,.ts用ts-node),核心是“谁执行”比“执行谁”更关键
真正容易被忽略的是:PowerShell策略只管“谁来执行这个文件”,不管“文件里写的是什么”。所以哪怕你把Python脚本改成.txt再用python去读,它也不拦——但没人这么干。关键是别让PowerShell觉得自己在“运行脚本”。


















