venv

Python虚拟环境(venv)使用教程


为什么需要虚拟环境

想象一下:你现在要同时维护两个Python项目——一个做数据分析用旧版pandas 1.5.x,另一个做API开发必须用新版pandas 2.2.x,要是全装在电脑的全局Python里,必然会崩得乱七八糟。

这就是虚拟环境(venv, Python 3.3+ 官方内置) 存在的核心价值,它解决的痛点具体有这几个:

  1. 彻底隔离的版本管理:每个项目可以有独立的Python包,甚至独立的Python解释器引用
  2. 全局环境零污染:不乱塞零散的第三方库,全局只保留最基础的Python和pip就行
  3. 极简的依赖分享:一键导出、一键安装,团队协作或跨设备部署都不会踩坑
  4. 100%的可复现性:不管谁在哪台机器上,按照依赖文档就能搭出完全一致的开发环境

手把手创建与激活

前置准备

确保你电脑上安装了 Python 3.3或更高版本——直接在终端输入python --version(Windows可能是py -3 --version)就能检查。

第一步:先给项目找个家

在任意位置创建专属项目目录,避免和其他文件混在一起:

# Linux/macOS/Windows PowerShell 通用
mkdir my_blog_project
cd my_blog_project

第二步:用venv一键生成

最通用、官方推荐的创建语法是:

# 第二个"venv"是虚拟环境的默认目录名(可以换成.env、.venv这类隐藏名)
python -m venv venv

💡 小提示:隐藏目录名(比如.venv)在Linux/macOS下更整洁,推荐项目使用;Windows PowerShell也能识别,不会有额外问题。

生成后的目录结构大概长这样(按系统略有差异):

my_blog_project/

├── venv/  # 虚拟环境核心目录
│   ├── bin/  # macOS/Linux:存Python/pip/激活脚本
│   │   ├── python
│   │   ├── pip
│   │   └── activate
│   ├── Scripts/  # Windows:替代bin的脚本目录
│   ├── lib/
│   │   └── python3.x/
│   │       └── site-packages/  # 虚拟环境的包安装位置(划重点!)
│   ├── include/
│   └── pyvenv.cfg  # 虚拟环境的配置文件
└── (你的项目代码目录,比如src/、main.py)

第三步:激活虚拟环境(必须做!)

激活后,你的终端会「锁定」在当前虚拟环境里,所有Python/pip操作都只会碰site-packages里的内容。

Linux/macOS(含Git Bash for Windows)

# 对应venv的目录名!
source venv/bin/activate

Windows

  • PowerShell(推荐)
    # 首次使用可能需要临时解除执行限制
    Set-ExecutionPolicy -Scope Process -ExecutionPolicy Bypass
    venv\Scripts\Activate.ps1
  • CMD
    venv\Scripts\activate.bat

激活成功的标志是:终端提示符前会出现括号包裹的虚拟环境名,比如:

(venv) user@MacBook-Pro my_blog_project % 

日常使用全流程

1. 在虚拟环境里安装包

直接用pip install就行——但强烈推荐用python -m pip,避免混淆全局和虚拟环境的pip!

# 安全写法(优先使用)
python -m pip install requests django
# 普通写法(也能用,但别在未激活环境下瞎试)
pip install requests django

2. 查看已安装的包

看看虚拟环境里的包是不是自己需要的:

pip list

3. 导出依赖清单(团队/部署必备)

一键把当前环境的所有包及版本号存成requirements.txt

# 重定向符号>会覆盖原有文件,小心使用
pip freeze > requirements.txt

生成的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

进阶技巧与最佳实践

✅ 最佳实践清单

  1. 每个项目1个专属环境:不管项目多小,都别省这一步!
  2. 绝对不要提交虚拟环境到Git:把venv/(或你自定义的目录名)加到.gitignore里——虚拟环境体积大,而且每个人的系统路径不一样,提交了没用
  3. 定期更新requirements.txt:每次加新包/删旧包,都要重新freeze一次
  4. 指定Python版本创建:如果项目有明确的Python版本要求(比如必须3.10),可以直接用:
    # 前提是你电脑上装了Python 3.10
    python3.10 -m venv venv
  5. 给虚拟环境起专属别名:项目太多容易搞混?创建时加--prompt
    python -m venv venv --prompt "my_blog"
    激活后提示符就会变成(my_blog)

🧩 冷门但有用的功能

1. 继承全局已有的大体积包

比如你装了10GB的torch在全局,不想每个项目都复制一份?可以用:

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

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

2. 升级虚拟环境的Python版本

如果全局Python从3.9升级到了3.10,想把现有虚拟环境也同步更新:

python -m venv --upgrade venv

常见问题排查

1. 激活失败?

  • 路径不对:检查你是不是在项目根目录下,激活脚本的路径是不是和虚拟环境目录名一致
  • Windows PowerShell执行限制:首次使用PowerShell激活要先执行临时解除限制的命令(见上文激活步骤)
  • 文件损坏:试试删掉现有虚拟环境,重新创建一个

2. 装的包找不到?

大概率是忘记激活虚拟环境了!用which python(Linux/macOS)或where python(Windows)确认一下当前Python解释器的路径——如果不是项目下的venv/bin/pythonvenv/Scripts/python.exe,就重新激活。


替代方案选哪个?

虽然venv是官方内置的轻量工具,但也有其他适合特定场景的选择:

  1. virtualenv:venv的前身,功能更全(比如支持更早的Python版本),但需要额外安装
  2. pipenv:把虚拟环境和依赖管理合并成一个工具,但现在社区活跃度一般
  3. poetry:现代Python项目的「全能选手」,同时做虚拟环境、依赖管理、打包,适合要发布到PyPI的项目
  4. conda:科学计算/机器学习领域首选,不仅能管Python包,还能管系统级别的依赖(比如CUDA)

但对绝大多数普通Python项目来说,venv已经足够好用——不用额外安装,官方维护,稳定可靠。