不要随便精简requirements.txt【Python依赖管理】

183 阅读2分钟

大家好,我是大林。这是大林的第1篇原创

过去,有一个产品A,底层依赖是这样的

protobuf>=3.20.2 ; platform_system != "Windows"
protobuf>=3.1.0, <=3.20.2 ; platform_system == "Windows"

后来,有个大聪明,后面迭代产品的时候,『优化』成了这样:

protobuf==3.20.2

白话: windows平台不能超过3.20.2

其他平台不能小于3.20.2

两者取交集,所以,protobuf只要等于3.20.2,就解决问题了,完美~

可是,真的是这样就好了吗?

有一天,这个产品A,要被集成到一个Linux镜像里

镜像里已经有别的(第三方)产品B,

它要求:

protobuf!=3.20.2
# 产品B和产品A命里犯冲!

哦豁 这下炸了

安装完A,发现B不能用了,因为protobuf被改了版本为3.20.2

产品A的开发不是很想改代码:

哎,既然是非win平台,那就按原先的依赖写法,直接强制版本升级为3.20.3不就好了吗!这个版本的话A理论上是可以跑的,B也能工作。

看上去很美好

但是但是,这个linux镜像要交付给用户使用

只要用户一发起pip install操作

必定触发pip自带的冲突检查、修理过程

于是报错红字、发生protobuf不停被卸载、不停地在3.20.23.20.3之间反复横跳

最终的解决方案,

很简单,也是产品A的开发最逃避不了的:

改代码!把大聪明的精简改掉,改回最初的平台判断。

protobuf>=3.20.2 ; platform_system != "Windows"
protobuf>=3.1.0, <=3.20.2 ; platform_system == "Windows"

这件事给我们的启示是

对于底层依赖这件事,

自己在什么版本、什么平台下能工作,就老老实实的陈列出来就完事了,不要怕冗余啰嗦,越详细越好。

今天的分享就到这。

为防止失联,还请加我个人微信:darlin2023123作为备份。

大林的个人微信二维码|300

历史好文

活久见,央视春晚吉祥物龙形象图,公然用AI洗稿建行龙,如何看待?

红包封面-二次元系列-红包主题封面&红包皮肤分享

今天是大林挑战创立『一人公司』的第28天
已投入时间 39h40m (番茄钟毛毛估)
已投入金额 4343.8 软妹币

觉得有意思的话,麻烦关注点赞鼓励一下吧~ ↓↓↓