大家好,我是大林。这是大林的第
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.2和3.20.3之间反复横跳
最终的解决方案,
很简单,也是产品A的开发最逃避不了的:
改代码!把大聪明的精简改掉,改回最初的平台判断。
protobuf>=3.20.2 ; platform_system != "Windows"
protobuf>=3.1.0, <=3.20.2 ; platform_system == "Windows"
这件事给我们的启示是
对于底层依赖这件事,
自己在什么版本、什么平台下能工作,就老老实实的陈列出来就完事了,不要怕冗余啰嗦,越详细越好。
今天的分享就到这。
为防止失联,还请加我个人微信:darlin2023123作为备份。
历史好文
活久见,央视春晚吉祥物龙形象图,公然用AI洗稿建行龙,如何看待?
今天是大林挑战创立『一人公司』的第28天
已投入时间 39h40m (番茄钟毛毛估)
已投入金额 4343.8 软妹币