Python依赖管理工具有哪些?

话题来源: Python虚拟环境venv使用技巧总结

说到Python的依赖管理工具,真是让我又爱又恨。刚开始用Python那会儿,我天真地以为只需要一个pip就万事大吉了,结果在不同项目间切换时各种版本冲突简直让人抓狂。后来我才明白,原来Python生态里有这么多好用的依赖管理工具,每种工具都有它特定的使用场景和优势,选择哪个完全取决于你的项目需求。

主流工具盘点:venv系列

venv绝对是Python开发者最熟悉的老朋友了,毕竟它作为标准库的一部分,开箱即用真的很方便。我记得在Python3.3之前,大家还得额外安装virtualenv,现在venv就能搞定大部分需求。不过说实话,venv还是太过基础了,它的定位更像是”虚拟环境创建器”而不是完整的依赖管理工具。

与venv类似但功能更丰富的virtualenv依然很受欢迎,它支持Python2和自定义解释器路径这些venv不具备的特性。我自己在维护一些遗留Python2项目时就不得不用virtualenv,毕竟venv根本不支持Python2。

新时代的宠儿:Pipenv和Poetry

Pipenv一度被官方力荐,它结合了pip和virtualenv的优势,还添加了依赖解析和Pipfile这样的新特性。但是…说实话我个人不太喜欢它的性能问题,特别是在依赖解析环节,有时候一个简单的install命令能卡上半分钟。这让我想起上个月在客户现场演示时,整个会议室的人都在等着Pipenv慢慢解析依赖的尴尬场景。

Poetry就很不一样了,它解决了Pipenv的大部分痛点。我的天,第一次用Poetry的时候简直惊为天人——不仅依赖解析快,还能自动处理子依赖冲突!现在新项目我都会优先考虑用Poetry,特别是那种需要发布到PyPI的包项目,它的pyproject.toml配置非常优雅。

特定场景的解决方案

conda可能是数据科学领域最常用的工具了。我有次做机器学习项目,光安装TensorFlow和CUDA相关的依赖就花了整整两天,后来转用conda一键安装瞬间就搞定了。不过conda生态和PyPI还是有些割裂,非科学计算项目可能不太适用。

还有像pip-tools这样的轻量级工具也值得一提,它就是专门解决pip的依赖锁问题,通过requirements.in和requirements.txt配合使用就能实现不错的依赖控制。我团队有个持续维护了5年的Django项目就一直在用这个组合,简单有效。

其实选择工具最重要的不是哪个最流行,而是哪个最适合你的项目。就像我那个用pip-tools老项目的例子,换成Poetry重写依赖配置可能得花好几天,这种时候维持现状反而是明智的选择。你们觉得呢?欢迎在评论区分享你的依赖管理经验~

评论