推荐学习书目
› Learn Python the Hard Way
Python Sites
› PyPI - Python Package Index
› http://diveintopython.org/toc/index.html
› Pocoo
值得关注的项目
› PyPy
› Celery
› Jinja2
› Read the Docs
› gevent
› pyenv
› virtualenv
› Stackless Python
› Beautiful Soup
› 结巴中文分词
› Green Unicorn
› Sentry
› Shovel
› Pyflakes
› pytest
Python 编程
› pep8 Checker
Styles
› PEP 8
› Google Python Style Guide
› Code Style from The Hitchhiker's Guide
chaleaochexist
V2EX  ›  Python

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

  •  
  •   chaleaochexist · Jul 22, 2024 · 6444 views
    This topic created in 844 days ago, the information mentioned may be changed or developed.

    我司最近进行安全审查, 要求所有的第三方依赖包的版本不能过期. 那就涉及到版本升级问题了, 但是升级就会带来 api 不兼容.

    我能想到的就是开源项目也有类似这样的问题.他们是如何解决 api 可能不兼容问题的?

    23 replies  •  2024-07-23 13:34:38 +08:00
    Sezxy
    Sezxy
    Jul 22, 2024 via Android
    1
    申请人力测试
    AntiEoom
    AntiEoom
    Jul 22, 2024
    2
    这是哪位领导一拍脑袋想出来的 KPI ,所有第三方都要是最新版,想想最近的 CrowdStrike 不怕死的很难看嘛。
    chaleaochexist
    chaleaochexist
    OP
    Jul 22, 2024
    3
    @AntiEoom 不不不 你这个太极端了
    不是非得最新版.
    renmu
    renmu
    Jul 22, 2024 via Android
    4
    人力解决
    huangyezhufeng
    huangyezhufeng
    Jul 22, 2024❤️1
    5
    首先把你的测试覆盖度提到 90%以上,然后核心依赖逐个升级
    chaleaochexist
    chaleaochexist
    OP
    Jul 22, 2024
    6
    @huangyezhufeng 开源项目就是依靠单测实现的是吗?
    crackidz
    crackidz
    Jul 22, 2024
    7
    有自动化测试吗?即便 API 兼容,也可能实现不兼容
    gotounix
    gotounix
    Jul 22, 2024
    8
    很难做到,如果只是使用第三方库,那还好。如果对第三方库进行了定制,哪怕是继承,都又很大程度上会出问题。

    比如这个: 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
    huangyezhufeng
    Jul 22, 2024
    9
    @chaleaochexist #6 https://github.com/tiangolo/sqlmodel/issues/654

    参考下这个吧,如果升级的依赖有明确的 break change ,每个依赖要单独升。比如从 1.x 升到 2.x ,这里的做法是先升到 1.x 最新版,然后做好测试;然后再慢慢升 2.x 。整个是个挺繁琐的过程...
    tangtang369
    tangtang369
    Jul 22, 2024
    10
    开源项目第三方依赖包都是固定版本的,升级版本大概率会出现运行不起来的情况
    shakeyo
    shakeyo
    Jul 22, 2024
    11
    c++er 成为轮子不是没有理由的
    fcfangcc
    fcfangcc
    Jul 22, 2024
    12
    无解,纯靠测试。即使 API 兼容,表现也可能不一样。

    最近升级了 fastapi 和 pydantic 版本,改了几十个文件。测试了大部分功能后,上线还是发现了好几个不兼容引起的 error
    Meteora626
    Meteora626
    Jul 22, 2024
    13
    很多都不测,上周遇到的 transformer 和 deepspeed 的问题,搜 GitHub 一堆人提,老版本就没事
    whoosy
    whoosy
    Jul 22, 2024
    14
    快跑
    tomczhen
    tomczhen
    Jul 22, 2024
    15
    这个目标达成的成本会很高。

    首先,Python 现有的包管理工具我是没找到一个能锁定传递依赖的方法,只能将传递依赖变成主动依赖。

    其次,一个环境下一个包只能有一个版本。

    另外是否 break change 无法从版本号确定。一旦项目依赖复杂,没有完整的测试覆盖无法发现问题。

    而发现问题后,也会遇到必须由上游依赖包来解决的情况。这时想自己解决只能通过维护额外分支解决。
    prosgtsr
    prosgtsr
    Jul 23, 2024
    16
    开源项目。很有可能就不解决了。用户使用发现了问题再去看要不要修改依赖版本
    Maerd
    Maerd
    Jul 23, 2024
    17
    靠测试用例全覆盖。。。提交 pr 的时候基本上都要求通过测试才能合并
    julyclyde
    julyclyde
    Jul 23, 2024
    18
    你们公司这么上进啊?
    要是腾讯肯定是勒令禁止升级以免发生“稳定性”问题,而根本不去研究到底哪个代码的变成引起的问题
    julyclyde
    julyclyde
    Jul 23, 2024
    19
    @tomczhen 他们的理念大概是:
    依赖关系是这个版本的一部分,你固定了这个版本,自动就固定了依赖关系

    但是问题是依赖关系有时候不写依赖于某个别的包的具体版本,而只写依赖于这个包名。唉
    chaleaochexist
    chaleaochexist
    OP
    Jul 23, 2024
    20
    @julyclyde
    >>> 你们公司这么上进啊?
    你猜是因为什么原因? 那肯定是因为 KPI 啊.
    chaleaochexist
    chaleaochexist
    OP
    Jul 23, 2024
    21
    @julyclyde
    >>> 依赖关系是这个版本的一部分,你固定了这个版本,自动就固定了依赖关系
    是的, 但是他们自己的版本也要升级啊.
    包括依赖关系的升级也是自己版本升级的一部分工作.
    support pydantic2.0 之类的.
    但是我看了一下 对应的开源项目 没太看懂.
    julyclyde
    julyclyde
    Jul 23, 2024
    22
    @chaleaochexist 能定这么正确的 KPI 也挺不容易的
    tomczhen
    tomczhen
    Jul 23, 2024
    23
    @julyclyde 感觉定这些的主导者大概是 Javaer ( doge
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   938 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 47ms · UTC 21:57 · PVG 05:57 · LAX 13:57 · JFK 16:57
    ♥ Do have faith in what you're doing.