[疑难杂症2023-001]代码没有任何改变,仅用CI打了一个新镜像,运行出错的可能原因分析

本文由Markdown语法编辑器编辑完成。

1. 前言

近日在项目中,遇到一个比较奇怪的问题。就是代码基本没有做任何修改,只是在配置文件中增加了几行配置,结果用CI的服务器,打了一个新的tag, 然后再运行时,就会出现报错。

ImportError: cannot import name 'Celery' from 'celery'

而报错的地方,可以肯定与做的更改没有任何关系。
这时,就陷入了困境。到底是哪里发生了问题呢?

2. 解决思路:

2.1 重新打包

遇到这种问题, 一般首先想到的,是不是自动打包时发生了异常,导致打出来的安装包出问题了.
因此,一般都会再Retry一下.但是经过一段时间的等待,重新打出来的包,启动时还是会报相同的问题.

2.2 查看依赖库

因为代码几乎没有变,那经过CI时,最可能变化的,可能就是依赖的第三方包的版本了.
从网上查到了类似的问题:
https://stackoverflow.com/questions/74025035/importerror-cannot-import-name-celery-from-celery
而且报错几乎完全一致.
下面第一个回答就是关于这个问题的.
它是说,由于Celery依赖的包importlib-metadata的版本发生了变化.
如果在打镜像时,没有特别指明这个第三方包的版本时,CI会自动安装最新的版本.
因此,CI自动下载了 importlib-metadata==5.0.0的版本.
而由于我们使用的Celery是4.3.0的版本,它需要依赖importlib-metadata的版本是4.12.0, 才不会报错.

知道了原因后,再去CI的服务器上看一下打包记录.
在这里插入图片描述
我查看CI服务器上的打包记录,显示的是下载的importlib_metadata==6.0.0的版本.
因此导致了Celery出错.

修复方案:

知道了问题后,再修改就很简单了.
在requirements.txt中,指明这个包的版本为4.12.0即可.再重新打镜像,便解决了这个问题.

......
importlib_metadata==4.12.0
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

inter_peng

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值