Python 虚拟环境 venv 与依赖管理入门:隔离项目、锁定版本
在 Python 开发中,几乎每个开发者都遇到过这样的尴尬:项目 A 需要 requests 2.28,项目 B 却要求 requests 2.31;刚升级了一个库,另一个老项目突然跑不起来。问题的根源在于,所有项目共用同一份全局 Python 环境。虚拟环境 venv 正是为解决这个问题而生的标准工具:它为每个项目创建独立的解释器副本和依赖空间,互不干扰。
一、什么是虚拟环境
虚拟环境就是一份“隔离的 Python 运行空间”。它包含一份 Python 解释器的副本和一套独立的 site-packages 目录。在虚拟环境里安装的第三方库,只对当前项目可见,不会污染全局环境,也不会被其他项目影响。Python 3.3 起,venv 已成为标准库的一部分,无需额外安装,使用 python -m venv 命令即可创建。
二、创建与激活虚拟环境
在项目根目录执行:
python -m venv .venv
这会在当前目录生成 .venv 文件夹。创建完成后需要激活,Windows、macOS 与 Linux 的命令各不相同:
Windows(PowerShell):.venv\Scripts\Activate.ps1
Windows(CMD):.venv\Scripts\activate.bat
macOS / Linux:source .venv/bin/activate
激活成功后,命令行提示符前会出现 (.venv) 字样,表示当前终端已进入虚拟环境。此后执行的 python、pip 命令都指向该环境。退出时执行 deactivate 即可。
三、安装依赖与 requirements.txt
激活环境后,用 pip 安装项目依赖:
pip install requests flask
为了让别人(或以后的自己)复现相同的环境,需要把依赖及版本写进 requirements.txt:
pip freeze > requirements.txt
这个命令会把当前环境里所有已安装包及其精确版本号输出到文件。新环境只需要执行 pip install -r requirements.txt,就能一键还原依赖。建议把 requirements.txt 提交到代码仓库,而把虚拟环境目录本身排除在外。
四、锁定版本:从 freeze 到分层管理
pip freeze 的输出是“精确锁定”,适合保证线上与开发环境完全一致。稍大一点的项目可以分层管理:requirements.txt 只写直接依赖和版本范围,再用 pip-tools 生成 requirements-lock.txt 做精确锁定。这样既保留了升级空间,又能在部署时完整复现。
另外注意两点:一是先升级 pip 本身(pip install --upgrade pip),避免旧版本解析问题;二是定期清理无用包,避免 requirements.txt 越来越臃肿。
五、常见问题与最佳实践
- 不要把 .venv 提交到 Git:在 .gitignore 里加上 .venv/,只保留 requirements.txt。
- 一个项目一个虚拟环境:不要多个项目共用,避免依赖互相牵制。
- 删除重建成本很低:环境出问题时,直接删掉 .venv 文件夹重建,再执行 pip install -r requirements.txt 即可恢复。
- 配合 IDE 使用:VS Code、PyCharm 都支持选择虚拟环境的解释器,配置一次即可自动识别。
- 系统 Python 不要动:不要在系统 Python 里直接用 pip 安装全局包,系统工具可能依赖它。
小结
venv 的核心价值只有两个词:隔离与可复现。隔离让项目互不干扰,可复现让环境能够随时重建。养成“新建项目先建虚拟环境、先升级 pip、依赖写入 requirements.txt”的习惯,几乎可以杜绝绝大多数“在我机器上明明能跑”的环境问题。从下一个 Python 项目开始,就给它建一个 venv 吧。
- 点赞
- 收藏
- 关注作者
评论(0)