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

Docker部署Django应用遇ImportError:已装Django却提示模块找不到

解决Docker部署Django时的ImportError: No module named django.core.management问题

这种情况我之前踩过坑!明明pip3 freeze显示Django已经装好了,但启动容器就是找不到模块,大概率是Python环境版本不匹配或者容器内的依赖路径被干扰了,给你几个针对性的排查方向:

  • 先确认Python版本和pip版本完全对应
    很多容器里默认python指向Python2,而你用pip3装的Django是给Python3用的。如果启动命令用的是python manage.py ...,那调用的是Python2的解释器,自然找不到Python3 site-packages里的Django。
    解决方法:

    • Dockerfile里安装依赖明确用pip3 install -r requirements.txt;
    • 启动命令换成python3 manage.py runserver 0.0.0.0:8000(不要省略3);
    • 可以在Dockerfile里加RUN which python3和RUN python3 --version,确认和pip3对应的是同一个Python版本。
  • 检查容器内Python的模块搜索路径
    虽然输出显示site-packages里有Django,但Python解释器的搜索路径可能没包含这个目录。你可以在Dockerfile里加一条命令:

    RUN python3 -c "import sys; print('\n'.join(sys.path))"
    

    运行构建后,查看输出的路径列表,确认包含Django所在的site-packages目录。如果没包含,就手动设置PYTHONPATH环境变量:

    ENV PYTHONPATH=/usr/local/lib/python3.6/site-packages  # 替换成你实际的site-packages路径
    
  • 排查docker-compose的volumes是否覆盖了依赖
    如果你在docker-compose.yml里挂载了本地目录到容器的/app或者系统Python路径,比如:

    volumes:
      - .:/app
    

    有时候本地目录的结构会干扰容器内的依赖(比如本地有个空的site-packages目录),可以先暂时注释掉volumes配置,重新构建运行,看看错误是否消失。如果消失了,再调整挂载策略,比如只挂载代码目录,而不是整个/app。

  • 尝试重新构建镜像,清除缓存
    有时候Docker的构建缓存会导致依赖没有正确安装,你可以用docker-compose build --no-cache强制重新构建所有步骤,确保Django被正确安装到容器里。

举个修改后的Dockerfile示例,你可以参考:

FROM python:3.6
WORKDIR /app

# 先复制requirements.txt,利用Docker缓存
COPY requirements.txt .
RUN pip3 install --upgrade pip
RUN pip3 install -r requirements.txt
RUN pip3 freeze  # 验证安装结果
RUN which python3  # 确认Python路径
RUN python3 -c "import sys; print('\n'.join(sys.path))"  # 验证模块搜索路径

# 复制代码
COPY . .

# 明确用python3启动服务
CMD ["python3", "manage.py", "runserver", "0.0.0.0:8000"]

按这个思路排查,应该能定位到问题所在!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 09:19:14