Python 开源项目在进行依赖升级的时候, 是如何规避掉大部分 bug 的?

查看 122|回复 10
作者:chaleaochexist   
我司最近进行安全审查, 要求所有的第三方依赖包的版本不能过期.
那就涉及到版本升级问题了, 但是升级就会带来 api 不兼容.
我能想到的就是开源项目也有类似这样的问题.他们是如何解决 api 可能不兼容问题的?
Goooooos   
申请人力测试
AntiEoom   
这是哪位领导一拍脑袋想出来的 KPI ,所有第三方都要是最新版,想想最近的 CrowdStrike 不怕死的很难看嘛。
chaleaochexist
OP
  
@AntiEoom 不不不 你这个太极端了
不是非得最新版.
renmu   
人力解决
huangyezhufeng   
首先把你的测试覆盖度提到 90%以上,然后核心依赖逐个升级
chaleaochexist
OP
  
@huangyezhufeng 开源项目就是依靠单测实现的是吗?
crackidz   
有自动化测试吗?即便 API 兼容,也可能实现不兼容
gotounix   
很难做到,如果只是使用第三方库,那还好。如果对第三方库进行了定制,哪怕是继承,都又很大程度上会出问题。
比如这个: https://github.com/mfogel/django-timezone-field/pull/137#issuecomment-2219793300
我是使用 https://github.com/celery/django-celery-beat/ 这个库,然后序列化的时候重写了 timezone_field.TimeZoneField 类。而且,我在 requirements.txt 中使用了 >=。
导致使用这个模板项目,新建项目、安装完依赖后,初始化的时候报错。
这只是一个很简单的例子,很多组件库都有 BREAKING 修改,如果在 CHANGELOG 中有指明还好,没有指明就是一个暗坑。而且,即便指明了,你升级的时候也不会去看每个包的 CHANGELOG 。
huangyezhufeng   
@chaleaochexist #6 https://github.com/tiangolo/sqlmodel/issues/654
参考下这个吧,如果升级的依赖有明确的 break change ,每个依赖要单独升。比如从 1.x 升到 2.x ,这里的做法是先升到 1.x 最新版,然后做好测试;然后再慢慢升 2.x 。整个是个挺繁琐的过程...
您需要登录后才可以回帖 登录 | 立即注册

返回顶部