每个 Python 项目依赖的库版本都不一样,如果全都装在系统环境里,迟早会互相冲突。虚拟环境就是解决这个问题的:给每个项目一个隔离的、干净的 Python 环境。这篇讲清楚 venv 从创建到日常使用的完整流程。

为什么需要虚拟环境

想象两个场景同时发生:

  • 项目 A 依赖 requests==2.25,项目 B 需要 requests==2.31;
  • 全局环境里 pip list 已经装了 100 多个包,自己都忘了哪个项目在用。

虚拟环境让每个项目拥有独立的 site-packages,删掉环境就等于删干净了所有依赖。

创建与激活

Python 3.3+ 自带 venv 模块,无需安装:

# 1. 在项目根目录创建名为 .venv 的虚拟环境
python -m venv .venv

# 2. 激活(Windows PowerShell)
.venv\Scripts\Activate.ps1

# 2. 激活(Windows CMD)
.venv\Scripts\activate.bat

# 2. 激活(macOS / Linux)
source .venv/bin/activate

激活成功后命令行前面会出现 (.venv) 标记,此时 python 和 pip 都指向虚拟环境内部:

(.venv) > pip install requests
(.venv) > python main.py

依赖管理:requirements.txt

在虚拟环境中安装的包,记得导出记录,方便别人(或换电脑的自己)复现:

# 导出当前环境的依赖
pip freeze > requirements.txt

# 新机器 / 新环境里一键还原
pip install -r requirements.txt

一个典型的 requirements.txt:

requests==2.31.0
flask==3.0.2
rich==13.7.0

退出与删除

# 退出虚拟环境
deactivate

# 删除虚拟环境:直接删文件夹即可
# Windows: rmdir /s /q .venv
# macOS/Linux: rm -rf .venv

常见坑

  1. VS Code 没用上虚拟环境:按 Ctrl+Shift+P 输入 "Python: Select Interpreter",选择 .venv 里的解释器;
  2. pip install 装到了全局:先看命令行有没有 (.venv) 前缀,没有就先激活;
  3. Activate.ps1 报「禁止运行脚本」:管理员 PowerShell 执行一次 Set-ExecutionPolicy RemoteSigned;
  4. .venv 不要提交到 Git:把它加进 .gitignore,仓库里只保留 requirements.txt。

小结

「一个项目一个 venv,依赖写进 requirements.txt」是 Python 开发的基本功。养成习惯后,换机器、部署、协作都会顺畅很多。