虚拟环境(Virtual Environment)是 Python 开发中必须掌握的技能。它能让你在同一台电脑上为不同的项目安装不同版本的库,互不干扰。
一、为什么要用虚拟环境?(先理解问题)
1. 没有虚拟环境时的痛苦
假设你有两个项目:
项目 | 需要的库版本 |
项目 A(老项目) | Django 2.2 |
项目 B(新项目) | Django 4.2 |
如果你直接在系统 Python 里安装:
pip install django==2.2 # 为项目A安装pip install django==4.2 # 为项目B安装 → 直接把 2.2 覆盖了!
结果:项目 A 跑不起来了,因为 Django 被升级到了 4.2。
😫 更惨的情况:你卸载了某个库,结果发现另一个项目也依赖它,导致多个项目同时崩溃。
2. 虚拟环境的解决方案
每个项目都有自己的"独立小房间",房间里有一套独立的 Python 解释器和库。
电脑├── 系统 Python(自带,尽量不动)│ └── 只装最基础的工具│├── 项目A/venv/ ← 项目A的独立房间│ ├── python.exe│ └── Lib/site-packages/│ └── django 2.2│└── 项目B/venv/ ← 项目B的独立房间 ├── python.exe └── Lib/site-packages/ └── django 4.2
✅ 项目 A 和项目 B 完全隔离,互不干扰!
二、创建虚拟环境(venv 模块)
Python 3.3 起内置了 venv 模块,不需要额外安装。
1. 准备工作:找到你的项目文件夹
# 先创建一个项目文件夹(以 Windows 为例)mkdir C:\Users\你的用户名\Desktop\我的项目cd C:\Users\你的用户名\Desktop\我的项目# 或者 macOS/Linuxmkdir ~/Desktop/我的项目cd ~/Desktop/我的项目
2. 创建虚拟环境
基本命令格式:
💡 -m venv 表示"运行 venv 模块"。venv 是 Python 标准库里的模块。
📌 Windows 系统
PowerShell / CMD:
# 进入项目文件夹cd C:\Users\小明\Desktop\我的项目# 创建虚拟环境(文件夹名通常叫 venv 或 .venv)python -m venv venv
执行后你会看到:
我的项目/└── venv/ ← 新创建的虚拟环境文件夹 ├── Include/ ├── Lib/ │ └── site-packages/ ← 以后 pip 安装的包会放在这里 ├── Scripts/ ← Windows 的可执行文件在这里 │ ├── activate.bat ← 激活脚本(CMD用) │ ├── Activate.ps1 ← 激活脚本(PowerShell用) │ ├── deactivate.bat ← 停用脚本 │ ├── pip.exe ← 独立的 pip │ └── python.exe ← 独立的 Python └── pyvenv.cfg ← 虚拟环境配置文件
📌 macOS / Linux 系统
# 进入项目文件夹cd ~/Desktop/我的项目# 创建虚拟环境python3 -m venv venv
⚠️ 注意:macOS/Linux 上通常用 python3 而不是 python。
执行后你会看到:
我的项目/└── venv/ ├── bin/ ← macOS/Linux 的可执行文件在这里 │ ├── activate ← 激活脚本 │ ├── pip ← 独立的 pip │ └── python ← 独立的 Python(指向 python3) ├── include/ ├── lib/ │ └── python3.x/ │ └── site-packages/ └── pyvenv.cfg
3. 指定 Python 版本创建(多版本时)
如果你电脑装了多个 Python 版本:
# Windows:用具体版本的 pythonC:\Users\小明\AppData\Local\Programs\Python\Python311\python.exe -m venv venv# 或者如果已加入环境变量py -3.11 -m venv venv# macOS/Linux:用具体版本python3.11 -m venv venv/usr/bin/python3.9 -m venv venv
4. 创建时排除 pip(特殊需求)
如果你不想在虚拟环境里装 pip(极少见):
python -m venv venv --without-pip
三、激活虚拟环境(非常重要!)
创建后必须激活,否则你用的还是系统 Python。
📌 Windows
CMD(命令提示符):
C:\Users\小明\Desktop\我的项目> venv\Scripts\activate.bat
PowerShell:
C:\Users\小明\Desktop\我的项目> venv\Scripts\Activate.ps1
⚠️ PowerShell 执行策略问题:如果报错"无法加载脚本",先运行:
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser
激活成功的标志:命令行前面出现了 (venv):
(venv) C:\Users\小明\Desktop\我的项目>
📌 macOS / Linux
激活成功的标志:
(venv) user@computer:~/Desktop/我的项目$
5. 验证是否激活成功
激活后,输入以下命令检查:
# 查看当前使用的 Python 路径where python # Windowswhich python # macOS/Linux# 你会看到路径指向了 venv 里的 python,而不是系统的# C:\Users\小明\Desktop\我的项目\venv\Scripts\python.exe
# 查看 pip 路径where pip # Windowswhich pip # macOS/Linux
四、在虚拟环境中安装包
激活虚拟环境后,所有的 pip install 都会安装到这个环境里,不会影响系统 Python。
# 确保前面有 (venv) 标记(venv) C:\Users\小明\Desktop\我的项目> pip install requests# 安装指定版本(venv) ...> pip install django==4.2# 安装多个包(venv) ...> pip install numpy pandas matplotlib# 查看已安装的包(venv) ...> pip list# 输出类似:# Package Version# ---------- -------# pip 23.x# setuptools 68.x# requests 2.31.0# django 4.2
五、保存和恢复依赖(requirements.txt)
1. 导出依赖清单
当你项目开发完成,需要把用到的库记录下来:
# 在激活的虚拟环境中(venv) ...> pip freeze > requirements.txt
生成的 requirements.txt 长这样:
requests==2.31.0django==4.2.7numpy==1.24.3pandas==2.0.3
2. 在新环境中恢复依赖
别人拿到你的项目,只需要:
# 1. 创建并激活新虚拟环境python -m venv venvvenv\Scripts\activate # Windowssource venv/bin/activate # macOS/Linux# 2. 一键安装所有依赖(venv) ...> pip install -r requirements.txt
✅ 这是团队协作的标准做法!
六、退出虚拟环境
执行后,命令行前面的 (venv) 标记消失,回到了系统 Python。
(venv) C:\Users\小明\Desktop\我的项目> deactivateC:\Users\小明\Desktop\我的项目>
七、删除虚拟环境
虚拟环境就是一个普通文件夹,直接删除即可:
# Windowsrmdir /s venv# macOS/Linuxrm -rf venv
💡 删除前确保已 deactivate 退出。即使没退出,删除文件夹也只会报错"文件正在使用",不会有严重后果。
八、完整实战:从 0 开始一个项目
场景:创建一个 Flask Web 项目
Step 1:创建项目文件夹
mkdir C:\Users\小明\Desktop\flask_democd C:\Users\小明\Desktop\flask_demo
Step 2:创建虚拟环境
Step 3:激活
Step 4:安装 Flask
(venv) ...> pip install flask
Step 5:写代码(app.py)
from flask import Flaskapp = Flask(__name__)@app.route('/')def hello(): return 'Hello from my venv!'if __name__ == '__main__': app.run(debug=True)
Step 6:运行
(venv) ...> python app.py
Step 7:保存依赖(以后给别人用)
(venv) ...> pip freeze > requirements.txt
Step 8:退出
九、常见问题排查
❌ 问题 1:python -m venv venv 报错
报错:
'python' 不是内部或外部命令,也不是可运行的程序
解决:
- Windows:安装 Python 时没勾选"Add Python to PATH",需要重新安装并勾选,或手动添加环境变量。
- macOS/Linux:用
python3 代替 python:
❌ 问题 2:PowerShell 无法激活(执行策略限制)
报错:
venv\Scripts\Activate.ps1 cannot be loaded because running scripts is disabled
解决:
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser
然后输入 Y 确认。
❌ 问题 3:激活后 pip 还是指向系统 pip
检查:
where pip # 应该指向 venv\Scripts\pip.exe
如果不对,说明激活失败,尝试:
- 检查是否用了正确的激活脚本(CMD 用
.bat,PowerShell 用 .ps1)
❌ 问题 4:虚拟环境太大
venv 默认会复制一份 Python 标准库,可能占用几十 MB。
创建时共用系统 Python 的标准库(节省空间):
python -m venv venv --system-site-packages
⚠️ 但这样虚拟环境会"看到"系统里已安装的包,隔离性变差。一般不建议。
❌ 问题 5:中文路径导致激活失败
Windows 用户名是中文(如 C:\Users\小明\...)有时会导致脚本执行问题。
解决: 把项目放在纯英文路径下,如 D:\projects\myproject。
十、venv vs Conda vs pyenv 简要对比
工具 | 特点 | 适用场景 |
venv
| Python 内置,轻量,标准做法 | 纯 Python 项目,最推荐新手使用 |
virtualenv
| 第三方库,功能比 venv 多一点 | 旧版 Python(<3.3)或需要更多功能 |
conda
| Anaconda 自带,可以管理非 Python 依赖(如 CUDA) | 数据科学、需要 C 库的项目 |
pyenv
| 管理多个 Python 版本本身 | 需要在不同项目切换 Python 3.8/3.9/3.11 等 |
💡 新手建议:先用熟 venv,这是 Python 官方标准,几乎所有场景都够用。
十一、最佳实践速查
场景 | 命令 |
创建环境 | python -m venv venv
|
激活(Win CMD) | venv\Scripts\activate.bat
|
激活(Win PS) | venv\Scripts\Activate.ps1
|
激活(Mac/Linux) | source venv/bin/activate
|
安装包 | pip install 包名
|
查看已装包 | pip list
|
导出依赖 | pip freeze > requirements.txt
|
恢复依赖 | pip install -r requirements.txt
|
退出环境 | deactivate
|
删除环境 | 直接删除 venv 文件夹 |