
哎我跟你讲…昨天晚上在客厅地板上盘着腿改代码的时候,突然有人在群里问我那个 Python 包依赖老是冲突怎么办,我当时正拿着手机想点外卖…结果一着急点成了两份麻辣烫,你说气不气人…算了不说这些,我继续说正事。
就是那个话题嘛——Python 包的依赖管理,我跟你们说…真的是…怎么讲呢…以前 pip 装着装着突然就给你来个 VersionConflict,那感觉就像准备吃火锅结果发现忘带碗了一样,整个人当场石化。
我记得前几天在公司楼下抽烟的时候,我们组小李还在那抱怨,说他一个小破脚本装个依赖,结果 pip 给他往里塞了几十个乱七八糟的包,版本号一个比一个神秘。小李整个人懵住:“哥这咋整?”我一边抖烟灰一边说:“你这不是典型没上管理工具嘛…”
当时我就随手在他电脑上敲了两行:

然后他看着生成的 requirements.txt 那表情,就跟发现新大陆似的:“卧槽这还能这样?!” 我说:“还能咋样,以前都是你被依赖欺负,现在该你收拾它们了。”
我晚上十一点多在床上准备睡了,小李突然给我发微信:“哥 pip-tools 没法管理不同 Python 版本下的依赖!” 我本来已经快睡着了,你知道那种眼睛黏住的感觉吗?我睁开手机说:“那你整 poetry 啊。”
他又懵了:“poetry 是啥?”
我当时差点气笑,爬起来给他打字:

然后跟他解释:
- 自动生成 pyproject.toml
- 自动搞虚拟环境
- 自动锁依赖
就是那种比你早上点外卖还省事儿的感觉,你下单它自动把锅、油、调料全给你配好了。
我正喝着咖啡,他跑来办公室:“哥!poetry 和公司源冲突了!” 当时我真想把咖啡拍桌上,但又怕烫手。
我说你别急,把源配一下:

然后他立马好了。我心想技术问题十有八九都是没看文档。
不过嘛…我不能怪他,毕竟 pip 的生态就是…怎么讲…乱中带乱。
前阵子我在家里一边吃泡面一边试了下 uv——那个新出的超快 Python 包管理器。速度快得离谱,我 pip 装半天它一秒钟搞定,我泡面还没泡开它就已经安装完毕。
我当时就说:“哎呀这不得试试?”

它那锁文件叫 uv.lock,内容干干净净,比 pip 那堆乱七八糟的依赖看的舒服多了。你们懂吧,就像以前你桌子上堆满螺丝钉,现在给你按型号排好了。
有时候我们线上项目就是…怎么说…依赖版本不统一,两个服务一个用 pydantic 1 一个已经升级到 2,结果数据都不兼容,线上日志刷得跟瀑布一样。
那天我记得凌晨两点,我困得眼花,蹲在机房地板上还得回滚版本。那时候我就暗暗下决心,以后必须锁版本。
锁版本最简单的就是:

但这个又会把一堆你根本不关心的包也锁进来,比如你明明只装了一个依赖,它给你塞 20 个底层依赖。你项目一升级,这些底层依赖一冲突,你就整个人裂开。
所以啊,最稳的是:
- 用 poetry 或 uv 管理顶级依赖
- 让工具自动生成 lock 文件
- 环境用 virtualenv / venv / poetry 的隔离环境
这样你无论在哪部署,都不会突然冒出来说:“卧槽怎么这个版本不一样?”
算了我先说完,再去关。
总之 Python 包依赖管理真正的“解法”就是:
- 别手动维护 requirements.txt,那玩意太容易乱
- 别在全局环境 pip 装东西
- 别靠运气解决版本冲突(我以前就是靠这个,现在头发都少了)
你就记一个:用工具,用 lock file,用隔离环境。
poetry、pip-tools、uv,你随便挑一个顺手的,都比你裸装要强一百倍。
行了不说了我水壶要炸了,我先去了…你要是还想问依赖冲突怎么定位啥的,下次我给你讲一个我们线上 numpy 跟 tensorflow 打架的血案…
扫码二维码 获取免费视频学习资料

- 本文固定链接: http://www.phpxs.com/post/13847/
- 转载请注明:转载必须在正文中标注并保留原文链接
- 扫码: 扫上方二维码获取免费视频资料