Docker部署Django+Celery出现Logger无warn属性的AttributeError问题求助
问题:Celery Worker启动时出现AttributeError: 'Logger' object has no attribute 'warn'
启动Celery Worker容器时触发以下错误:
File "/usr/local/lib/python3.13/site-packages/kombu/transport/redis.py", line 92, in <module> crit, warn = logger.critical, logger.warn ^^^^^^^^^^^ AttributeError: 'Logger' object has no attribute 'warn'
相关配置
requirements.txt文件
Django==4.2.7 psycopg==3.1.13 celery[redis]==5.3.6 django-celery-beat==2.5.0 redis==5.0.1
Dockerfile
FROM python:3.13.0a1-alpine3.18 ENV PYTHONDONTWRITEBYTECODE 1 ENV PYTHONUNBUFFERED 1 COPY requirements /temp/requirements RUN apk add postgresql-client build-base postgresql-dev RUN pip install -r /temp/requirements/local.txt WORKDIR /myproject COPY . . EXPOSE 8000
docker-compose.yml
redis: image: redis:7.2.3-alpine3.18 ports: - '6379:6379' restart: always worker: build: context: . command: > sh -c "celery -A config worker -l INFO" restart: always depends_on: - redis
项目结构

src文件夹包含项目应用。
问题原因
Python 3.13 alpha版本中,标准库logging模块的logger.warn方法被正式移除(该方法早已被标记为废弃,官方推荐使用logger.warning),而当前使用的Celery 5.3.6依赖的kombu版本未适配这一变更,导致代码调用不存在的logger.warn属性触发错误。
解决方案
方案1:降级Python版本(推荐)
Python 3.13处于alpha测试阶段,第三方库生态支持不完善,建议降级到稳定版Python 3.12:
修改Dockerfile中的基础镜像:
FROM python:3.12-alpine3.18
重新构建镜像并启动容器即可。
方案2:升级kombu到兼容版本
kombu后续版本已修复该问题,可在requirements.txt中指定兼容的kombu版本,比如添加:
kombu>=5.3.7
然后重新安装依赖、构建镜像并启动容器。
内容的提问来源于stack exchange,提问作者Mikhailo
相关产品推荐
相关产品推荐

