Python 虚拟环境 venv 完全上手指南

为什么需要虚拟环境?

假设这样一个场景:你手上同时进行着两个 Python 项目。
一个是用 pandas 1.5.x 做数据分析的老项目,另一个是用 pandas 2.2.x 打造 REST API 的新服务。
如果你把两个版本的 pandas 都塞进电脑的全局 Python 环境里,结局只有一个——依赖冲突,项目崩溃。

这就是 虚拟环境 的用武之地。
venv 是 Python 3.3 开始官方内置的虚拟环境工具,它的核心价值非常清晰:

  1. 彻底的隔离管理 – 每个项目拥有一套独立的 Python 包,甚至可以绑定特定的 Python 解释器版本。
  2. 零污染的全局环境 – 再也不用让系统 Python 塞满各种零散的第三方库。
  3. 极简的依赖分享 – 一键导出、一键安装,团队协作或跨设备部署都轻松自如。
  4. 100% 可复现的运行条件 – 不论在哪台电脑上,只要拿到依赖清单,就能还原出完全一致的开发环境。

从零开始:创建与激活

前置检查

请确保你的电脑上安装了 Python 3.3 或更高版本。打开终端,输入以下命令就能看到版本号:

python --version

Windows 用户也可以使用:

py -3 --version

第一步:为项目创建一个“家”

在任意位置新建一个项目目录,把所有代码和配置文件收纳其中:

mkdir my_blog_project
cd my_blog_project

第二步:用 venv 一键生成

推荐的创建命令非常简短,最后的 venv 是虚拟环境的目录名(你也可以换成 .venv 这样的隐藏目录):

python -m venv venv

💡 小贴士
在 Linux / macOS 下,隐藏目录名(如 .venv)能让文件夹列表更整洁,推荐项目使用。Windows 的 PowerShell 同样能完美识别。

执行完毕后,目录结构大致如下(不同系统略有差异):

my_blog_project/
├── venv/               # 虚拟环境核心
│   ├── bin/            # macOS/Linux:存放 python、pip 和激活脚本
│   ├── Scripts/        # Windows:存放可执行文件
│   ├── lib/
│   │   └── python3.x/
│   │       └── site-packages/  # 👈 虚拟环境装包的位置
│   ├── include/
│   └── pyvenv.cfg      # 虚拟环境配置文件
└── (你的项目代码)

第三步:激活虚拟环境(一定要做!)

激活之后,终端会“锁定”在这个虚拟环境内,所有的 pythonpip 操作都只会影响 site-packages 里的内容。

Linux / macOS(包括 Git Bash)

source venv/bin/activate

Windows - PowerShell (推荐)

首次使用可能需要临时放开执行策略:

Set-ExecutionPolicy -Scope Process -ExecutionPolicy Bypass
venv\Scripts\Activate.ps1

Windows - CMD

venv\Scripts\activate.bat

激活成功的标志是:终端提示符前面会出现一个括号圈起来的虚拟环境名,例如:

(venv) user@MacBook-Pro my_blog_project %

日常使用全流程

1. 在虚拟环境中安装包

推荐使用 python -m pip 的写法,能有效避免混淆全局 pip 与虚拟环境 pip:

python -m pip install requests django

同样也可以直接写 pip install requests django,但前提是已经激活了环境。

2. 查看已安装的包

随时查看虚拟环境里到底有哪些库:

pip list

3. 导出依赖清单(协作/部署必备)

把当前环境所有包的名称和精确版本冻结到 requirements.txt 文件中:

pip freeze > requirements.txt

文件内容示例:

asgiref==3.8.1
django==5.0.6
requests==2.32.3
urllib3==2.2.1

4. 从依赖清单重建环境

拿到别人的项目,或是换了新电脑后,只需三步就能重新拥有完全一致的运行环境:

  1. 进入项目目录
  2. 创建并激活一个全新的虚拟环境
  3. 一键安装所有依赖:
    python -m pip install -r requirements.txt

5. 退出虚拟环境

工作完成,想回到全局环境时,就输入:

deactivate

进阶技巧与最佳实践

✅ 推荐的最佳实践

  • 一个项目,一个专属环境 – 不管项目多小,都值得拥有自己的虚拟环境。
  • 不要将虚拟环境文件夹上传到 Git – 把 venv/(或 .venv/)写入 .gitignore。虚拟环境体积大且包含系统路径,搬来搬去毫无意义。
  • 及时更新 requirements.txt – 每次安装或卸载包后,记得重新执行 pip freeze
  • 指定 Python 版本创建 – 如果项目严格要求 Python 3.10,可以直接这样创建:
    python3.10 -m venv venv
  • 给虚拟环境起一个自定义别名 – 遇到多个环境时能一眼分清:
    python -m venv venv --prompt "my_blog"
    激活后提示符就会显示为 (my_blog)

🧩 冷门但好用的功能

继承全局已装的大体积包

如果你在全局装了 10GB 的 PyTorch,不想在每个项目里再复制一份,可以用这个参数:

python -m venv venv --system-site-packages

⚠️ 谨慎使用!全局包的版本变动可能会悄悄影响你的项目。

升级虚拟环境的 Python 版本

全局 Python 从 3.9 升到 3.10 后,已有的虚拟环境可以用下面命令同步升级:

python -m venv --upgrade venv

常见问题排查

❓ 激活失败?

  • 检查路径:确认你当前位于项目根目录,并且激活脚本的路径与虚拟环境目录名一致。
  • PowerShell 执行限制:第一次使用 PowerShell 激活前,务必先执行 Set-ExecutionPolicy -Scope Process -ExecutionPolicy Bypass
  • 文件损坏:最简单的办法 —— 删掉现在这个环境的目录,重新 python -m venv 创建一个。

❓ 装的包找不到?

大概率是忘记激活虚拟环境了。
which python(Linux / macOS)或 where python(Windows)查看当前 Python 解释器的路径。
如果路径没有指向项目中的 venv/bin/pythonvenv\Scripts\python.exe,那就赶紧重新激活一下。


替代方案怎么选?

venv 是官方内置的轻量级方案,但 Python 生态中还有其他不错的工具:

工具特点
virtualenvvenv 的前身,功能更丰富,支持更早的 Python 版本,但需额外安装。
pipenv一度流行,整合了虚拟环境和依赖管理,但社区活跃度近些年有所下降。
poetry现代 Python 项目的“全能选手”,集虚拟环境、依赖管理、打包于一身。
conda科学计算 / 机器学习首选,不仅能管 Python 包,还能装系统级依赖(如 CUDA)。

对于绝大多数普通 Python 项目来说,venv 已经完全够用:无需额外安装、官方持续维护,简单可靠。