You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Docker化Django应用报错:找不到kafka.vendor.six.moves模块

问题:Docker化Django应用中kafka-python模块找不到kafka.vendor.six.moves

环境信息

Dockerfile

FROM python:alpine

ENV PYTHONDONTWRITEBYTECODE 1
ENV PYTHONUNBUFFERED 1
ENV DJANGO_SUPERUSER_PASSWORD datahub

RUN mkdir app
WORKDIR /app
COPY ./app .
RUN mkdir -p volumes

RUN apk update
RUN apk add --no-cache gcc python3-dev musl-dev mariadb-dev

RUN pip3 install --upgrade pip
RUN pip3 install -r requirements.txt

RUN apk del gcc python3-dev musl-dev

CMD python3 manage.py makemigrations --noinput &&\
    while ! python3 manage.py migrate --noinput; do sleep 1; done && \
    python3 manage.py collectstatic --noinput &&\
    python3 manage.py createsuperuser --user datahub  --email admin@localhost --noinput;\
    python3 manage.py runserver 0.0.0.0:8000

requirements.txt

kafka-python==2.0.2

错误信息

ModuleNotFoundError: No module named 'kafka.vendor.six.moves'

完整错误栈:

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/local/lib/python3.12/site-packages/kafka/__init__.py", line 23, in <module>
    from kafka.consumer import KafkaConsumer
  File "/usr/local/lib/python3.12/site-packages/kafka/consumer/__init__.py", line 3, in <module>
    from kafka.consumer.group import KafkaConsumer
  File "/usr/local/lib/python3.12/site-packages/kafka/consumer/group.py", line 13, in <module>
    from kafka.consumer.fetcher import Fetcher
  File "/usr/local/lib/python3.12/site-packages/kafka/consumer/fetcher.py", line 19, in <module>
    from kafka.record import MemoryRecords
  File "/usr/local/lib/python3.12/site-packages/kafka/record/__init__.py", line 1, in <module>
    from kafka.record.memory_records import MemoryRecords, MemoryRecordsBuilder
  File "/usr/local/lib/python3.12/site-packages/kafka/record/memory_records.py", line 27, in <module>
    from kafka.record.legacy_records import LegacyRecordBatch, LegacyRecordBatchBuilder
  File "/usr/local/lib/python3.12/site-packages/kafka/record/legacy_records.py", line 50, in <module>
    from kafka.codec import (
  File "/usr/local/lib/python3.12/site-packages/kafka/codec.py", line 9, in <module>
    from kafka.vendor.six.moves import range
ModuleNotFoundError: No module named 'kafka.vendor.six.moves'

解决方案

问题根源是kafka-python 2.0.2版本过于老旧,与Python 3.12不兼容——Python 3.12移除了部分six库相关的兼容逻辑,而老版本kafka-python依赖自带的six模块,导致导入失败。以下是三种解决办法,优先推荐前两种:

方案一:升级kafka-python到兼容Python 3.12的版本

修改requirements.txt,将kafka-python版本更新到支持Python 3.12的版本(比如2.2.0及以上):

kafka-python==2.2.0

或者直接指定兼容范围:

kafka-python>=2.2.0,<3.0.0

然后重新构建Docker镜像:

docker build -t your-django-app .

方案二:降级Python版本到与kafka-python 2.0.2兼容的版本

如果必须保留kafka-python 2.0.2,将Dockerfile的基础镜像换成Python 3.11-alpine(该版本与kafka-python 2.0.2兼容):
修改Dockerfile第一行:

FROM python:3.11-alpine

重新构建镜像即可。

方案三:手动修改依赖导入(不推荐,hack方式)

若坚持使用Python 3.12和kafka-python 2.0.2,可通过以下步骤临时修复:

  1. 在requirements.txt中添加six依赖:
kafka-python==2.0.2
six==1.16.0
  1. 在Dockerfile的RUN pip3 install -r requirements.txt之后添加命令,修改kafka模块的导入语句:
RUN sed -i 's/from kafka.vendor.six.moves import range/from six.moves import range/' /usr/local/lib/python3.12/site-packages/kafka/codec.py

注意:此方法仅修复当前报错的导入,后续可能出现其他兼容问题,且容器重建后需重新执行修改,不建议长期使用。

内容的提问来源于stack exchange,提问作者Navid Sadeghi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.08 21:25:08