040、Python虚拟环境:venv与pip包管理
040、Python虚拟环境:venv与pip包管理
从一次深夜调试说起
上周团队里新来的实习生跑来找我,说他的Django项目在本地运行正常,一部署到测试服务器就报依赖冲突。我过去看了一眼,发现他系统Python里装了三四个不同版本的requests库——原来他一直用pip install直接往系统环境里塞包。这种场景太常见了:项目A需要Django 2.2,项目B需要Django 3.1,系统工具又依赖某个特定版本的six库,全混在一起迟早要出问题。
Python虚拟环境就是为了解决这种混乱而生的。它不是什么高深技术,但却是区分“写脚本的”和“做工程的人”的第一道分水岭。
为什么非用虚拟环境不可?
很多人刚开始会觉得:“我就一个项目,直接装系统里不就行了?” 问题往往在三个月后暴露:你接手另一个老项目,一运行就发现新装的包把旧项目的依赖覆盖了;或者你升级了某个库,结果自己写的工具脚本突然报错;更常见的是团队协作时,你的代码在别人机器上跑不起来。
虚拟环境本质上是个隔离的Python运行环境。每个环境有自己的解释器副本(实际是软链接)、独立的site-packages目录、独立的pip。环境之间互不干扰,就像给每个项目单独分配了一个干净的“房间”。
venv:Python官方的解决方案
Python 3.3之后内置了venv模块,这也是目前最推荐的方式。用法简单到令人发指:
