cmd用activate.bat,PowerShell用Activate.ps1但默认被策略拦截;需设RemoteSigned策略或改用cmd/VS Code配置等替代方式。

直接结论:cmd 用 activate.bat,PowerShell 用 Activate.ps1,但后者默认被系统策略拦截,必须先改执行策略或换方式。
cmd 下激活虚拟环境:用 activate.bat 就行
cmd 不限制脚本执行,只要路径对、环境存在,activate.bat 就能直接运行。
- 确保你在虚拟环境根目录下(比如
D:myprojectenv),或者已进入Scripts目录 - 执行命令:
venvScriptsctivate.bat(路径可相对,也可绝对) - 成功后提示符前会显示
(venv),表示当前 Python 和 pip 已指向该环境 - 如果提示“不是内部或外部命令”,大概率是路径写错,或你误在 PowerShell 里敲了这行(PowerShell 不认
.bat后缀的自动解析)
PowerShell 下激活失败?核心是 Activate.ps1 被执行策略拦住
PowerShell 默认不允许运行本地未签名的 .ps1 脚本,而 venvScriptsActivate.ps1 正是这种脚本。所以你看到的报错不是 Python 问题,而是 Windows 安全机制在起作用。
- 错误典型信息:
无法加载文件 ... Activate.ps1,因为在此系统上禁止运行脚本 - 根本原因:当前策略是
Restricted或AllSigned,而你需要的是RemoteSigned - 修复方法(需管理员权限):
Set-ExecutionPolicy RemoteSigned -Scope CurrentUser—— 这比-Scope LocalMachine更安全,只影响当前用户 - 执行后关闭再重开 PowerShell,再运行:
.\venv\Scripts\Activate.ps1(注意开头的.和反斜杠转义)
不想改策略?绕过 Activate.ps1 的三种实际可用方式
有些场景不能/不愿调执行策略(比如公司锁死的办公机),这些替代法更务实:
立即学习“Python免费学习笔记(深入)”;
- 临时切到 cmd:关掉 PowerShell 窗口,Win+R → 输入
cmd→ 进目录后跑venvScriptsctivate.bat - 在 PowerShell 里用
cmd /c委托执行:cmd /c "venvScriptsctivate.bat && python --version",适合单次命令 - VS Code 用户可直接改终端默认配置:设置里搜
terminal.integrated.defaultProfile.windows,值改成Command Prompt,重启终端即生效
真正容易被忽略的是:PowerShell 中执行 Activate.ps1 必须带路径前缀(如 .),哪怕你在 Scripts 目录下直接敲 Activate.ps1 也会失败——这是 PowerShell 的安全设计,防止意外执行同名当前目录脚本。


















