虚拟环境 venv
venv
是 Python 3.3+ 内置的标准库模块,用于创建轻量级的“虚拟环境”(Virtual Environment)。每个虚拟环境拥有独立的 Python 解释器副本和独立的包安装目录,从而实现项目之间的依赖隔离。
核心目标:避免不同项目之间的依赖冲突,例如:
项目 A 需要 Django 3.2
项目 B 需要 Django 5.0 使用
venv
可以让两个项目互不干扰。
venv 的基本使用
创建虚拟环境
python3 -m venv myenv
myenv
是虚拟环境的目录名,你可以自定义,常见命名有 .venv
、venv
、env
、myproject_env
。推荐使用.venv
(带点表示隐藏),简洁且被许多工具(如 VS Code)自动识别。
激活虚拟环境
# macOS/Linux
source myenv/bin/activate
# windows
myenv\Scripts\activate
激活后,命令行提示符前会显示环境名,例如:
(myenv) $
此时你使用的 python
和 pip
都指向虚拟环境中的副本。
退出虚拟环境
deactivate
执行后,恢复使用系统的 Python 和 pip
。
在虚拟环境中安装包
激活环境后,使用 pip
安装的包只会安装到该环境:
pip install requests flask jinja2==2.6
包会被安装到:
myenv/lib/python3.x/site-packages/
系统环境和其他虚拟环境完全不受影响。
依赖管理
为了便于项目共享和部署,通常使用 requirements.txt
文件记录依赖。
生成依赖文件
pip freeze > requirements.txt
该文件内容类似:
Flask==2.3.3
Jinja2==3.1.2
Werkzeug==2.3.7
安装依赖文件中的包
pip install -r requirements.txt
建议将 requirements.txt
提交到版本控制(如 Git),但不要提交 myenv/
目录。
venv 的工作原理
venv
并不会复制整个 Python 解释器,而是通过符号链接(symlink)或硬链接来节省空间,仅创建必要的文件结构:
myenv/bin/python
→ 指向系统 Python 解释器myenv/bin/pip
→ 使用独立的site-packages
目录myenv/pyvenv.cfg
→ 配置文件,记录基础 Python 路径和是否继承系统包
venv
创建的是“轻量级”环境,不是完全独立的 Python 安装。
venv vs 其他工具对比
venv
(内置)
Python 标准库,开箱即用
无需安装,简单可靠
功能较基础
virtualenv
第三方工具,功能更丰富
支持旧版 Python,插件多
需额外安装
conda
Anaconda 的环境管理器
支持非 Python 包,跨平台
较重,学习成本高
pipenv
结合 pip 和 venv
自动管理 Pipfile
维护不稳定
poetry
现代化 Python 项目管理
依赖解析强,发布方便
学习曲线陡
✅ 推荐:日常开发优先使用
venv
+pip
+requirements.txt
,简单可控。
最后更新于