在CMD或PowerShell中运行.venv\Scripts\activate(CMD)或.venv\Scripts\Activate.ps1(PowerShell)可激活虚拟环境,成功后提示符显示(.venv)且where python指向虚拟环境内Python;PowerShell需先执行Set-ExecutionPolicy RemoteSigned -Scope CurrentUser解除脚本限制。

Windows 下直接运行 activate.bat 就能激活
不是双击,也不是用 Python 执行,而是**在 CMD 或 PowerShell 当前目录下输入命令运行**。假设你创建的虚拟环境叫 .venv(推荐命名),那就在项目根目录执行:
-
.venv\Scripts\activate—— CMD 中可用,自动匹配activate.bat -
.venv\Scripts\Activate.ps1—— PowerShell 中需显式指定后缀,否则默认策略会拦截
成功后提示符最前面会出现 (.venv),比如:(.venv) C:\myproject>。此时 where python 应返回 .venv\Scripts\python.exe。
PowerShell 报“禁止运行脚本”?改执行策略就行
这是 Windows 默认安全策略阻止了本地未签名脚本(Activate.ps1)运行,和病毒无关,只需对当前用户放开一次:
- 以普通权限(不用管理员)打开 PowerShell
- 运行:
Set-ExecutionPolicy RemoteSigned -Scope CurrentUser - 再执行
.venv\Scripts\Activate.ps1即可
⚠️ 不要选 Unrestricted 或对 LocalMachine 生效——过度放开会带来真实风险。
立即学习“Python免费学习笔记(深入)”;
CMD 和 PowerShell 的激活行为其实不完全一样
虽然最终效果都是让 python 和 pip 指向虚拟环境内,但底层机制有差异:
- CMD 的
activate.bat本质是批量设置PATH和VIRTUAL_ENV环境变量,并修改提示符 - PowerShell 的
Activate.ps1是脚本,还能额外调整$env:PSModulePath和模块加载逻辑 - PyCharm 内置终端默认走 PowerShell,所以如果你在 PyCharm 里敲
.venv\Scripts\activate失败,大概率是因为它实际调用的是 PowerShell,得用.venv\Scripts\Activate.ps1
别把 activate 当成永久开关
它只影响当前终端会话,关掉窗口或新开一个,就得重新激活。也别试图用 python -m venv 命令去“激活”——那个命令只负责创建,不负责切换环境。
最容易被忽略的一点:如果你在激活后又手动改过 PYTHONPATH 或 PATH,或者启动了另一个子 shell(比如用 cmd /k 再开一层),虚拟环境就可能“失效”,pip install 会悄悄装进全局 site-packages。


















