venv 是 Python 虚拟环境 的核心工具,是python3.3+之后的一个内置库, 用于创建独立的 Python 运行环境。
下面我将为你详细解释它的概念、作用和用法。
一、什么是 venv?
venv(Virtual Environment)是 Python 3.3+ 内置的模块,用于创建轻量级的虚拟环境。
每个虚拟环境都拥有:
- 独立的 Python 解释器
副本 - 独立的包安装目录
- 独立的环境配置
二、为什么需要虚拟环境?
主要解决的问题:
- 依赖冲突:不同项目需要同一库包的不同版本
- 项目隔离:保持项目环境的纯净和可复现
- 权限管理:避免需要系统权限安装包
- 部署一致性:确保开发、测试、生产环境一致
实际场景示例:
项目A:需要 Django 2.2 + requests 2.20
项目B:需要 Django 3.1 + requests 2.25
没有虚拟环境 → 只能安装一个版本,另一个项目无法运行
使用虚拟环境 → 每个项目有自己的独立环境
三、venv 的工作原理
my_project/
├── venv/ ← 虚拟环境目录,在项目内创建虚拟环境.
│ ├── bin/ ← 脚本目录(Windows是Scripts)
│ ├── lib/ ← 包安装目录
│ └── pyvenv.cfg ← 环境配置文件
├── src/ ← 项目源代码
└── requirements.txt ← 依赖列表
四、基本使用教程
1. 创建虚拟环境
# 创建名为 my_env_test1 的虚拟环境, 名称随便写
python -m venv my_env_test1
2. 激活虚拟环境
Windows (CMD/PowerShell):
# CMD
venv\Scripts\activate.bat
# PowerShell
venv\Scripts\Activate.ps1
# 如果遇到执行策略问题,先运行:
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser
macOS/Linux:
source my_env_test1/bin/activate
激活后,命令行提示符通常会显示环境名:
(my_env_test1) user@host:~$
3. 使用虚拟环境
# 检查Python路径(确认在虚拟环境中)
which python # macOS/Linux
where python # Windows
# 安装包(只影响当前虚拟环境)
pip install django
pip install requests==2.25.1
# 查看已安装包
pip list
# 导出所有的依赖到requirements.txt文件中
pip freeze > requirements.txt
# 从文件安装依赖
pip install -r requirements.txt
4. 停用虚拟环境(前提是: 你当前正在这个环境中)
deactivate
五、常用命令和操作
创建指定Python版本的环境
# 使用特定Python解释器, 你用哪一个版本的解释创建的虚拟环境, 那么虚拟环境中的解释器就是哪一个版本的.
python3.8 -m venv venv
复制环境
# 导出依赖(假设现在你在虚拟环境my_env_test1中, 你把所有的依赖打包放在文件中 )
pip freeze > requirements.txt
# 在新位置创建并安装
python -m venv my_env_test2 # 重新创建了一个新的虚拟环境my_env_test2
source my_env_test2/bin/activate # 激活这个新的虚拟环境
pip install -r requirements.txt # 把所有的依赖, 在新的虚拟环境中再重新安装一遍
删除虚拟环境
# 直接删除虚拟环境的文件夹即可
rm -rf my_env_test1 # macOS/Linux
rmdir /s venv # Windows
六、最佳实践
-
每个项目单独环境
project1/ ├── .gitignore ├── myenv_test1/ # 虚拟环境目录,添加到.gitignore ├── bin/ # Mac/Linux: 可执行文件 │ ├── python # Python 解释器 │ ├── pip # pip 包管理器 │ └── activate # 激活脚本 ├── Scripts/ # Windows: 可执行文件 │ ├── python.exe │ ├── pip.exe │ └── activate.bat ├── lib/ # 安装的包 │ └── python3.x/ │ └── site-packages/ ├── include/ # C/C++ 头文件 └── pyvenv.cfg # 配置文件 ├── src/ # 项目源代码 └── requirements.txt project2/ ├── .gitignore ├── myenv_test2/ # 虚拟环境目录, 添加到.gitignore中 ├── bin/ # Mac/Linux: 可执行文件 │ ├── python # Python 解释器 │ ├── pip # pip 包管理器 │ └── activate # 激活脚本 ├── Scripts/ # Windows: 可执行文件 │ ├── python.exe │ ├── pip.exe │ └── activate.bat ├── lib/ # 安装的包 │ └── python3.x/ │ └── site-packages/ ├── include/ # C/C++ 头文件 └── pyvenv.cfg # 配置文件 ├── src/ # 项目源代码 └── requirements.txt -
维护 requirements.txt
# requirements.txt 示例 Django==3.2.18 requests>=2.25.0,<3.0.0 pandas -
.gitignore 配置
# 忽略虚拟环境 venv/ env/ *.pyc __pycache__/
七、venv 与其他工具对比
| 工具 | 特点 | 适用场景 |
|---|---|---|
| venv | Python内置,简单易用 | 标准项目,初学者友好 |
| virtualenv | 功能更丰富,支持旧版Python | 需要更多自定义选项 |
| conda | 包含非Python包,环境管理更强 | 数据科学,跨语言项目 |
| pipenv | 依赖锁定,自动管理 | 复杂依赖管理 |
| poetry | 现代包管理,依赖解析优秀 | 包开发和发布 |
八、常见问题解答
Q1:venv 会占用很多磁盘空间吗?
A:不会,venv 只复制必要的文件,通常占用 15-50MB。
Q2:可以把 venv 文件夹移动到其他位置吗?
A:不建议直接移动,最好在新位置重新创建。
Q3:团队协作时如何处理虚拟环境?
A:只共享 requirements.txt,每个人自己创建虚拟环境。
Q4:如何确保环境一致性?
# 使用精确版本
pip freeze > requirements.txt
# 安装时指定
pip install -r requirements.txt
九、进阶技巧
1. 自定义虚拟环境位置
# 创建在项目外部
python -m venv ~/.virtualenvs/myproject
# 使用绝对路径激活
source ~/.virtualenvs/myproject/bin/activate
2. 使用预装包创建环境
python -m venv venv --system-site-packages
3. 快速切换环境的别名(bash/zsh用户)
# 添加到 ~/.bashrc 或 ~/.zshrc
alias activate_myproject="source ~/projects/myproject/venv/bin/activate"
总结
venv 是 Python 开发中必不可少的工具,它能:
- ✅ 隔离项目依赖
- ✅ 避免版本冲突
- ✅ 简化部署流程
- ✅ 提高开发效率
建议:无论项目大小,从一开始就使用虚拟环境,这是 Python 开发的最佳实践。
每个项目, 都有自己的虚拟环境, 这是标准的做法.