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

将Django应用+Apache迁移至Docker时遇ModuleNotFoundError问题求助

问题描述

尝试将Django测试应用迁移至Docker,始终遇到ModuleNotFoundError: No module named 'django'错误,尽管容器内已正确安装Django。经排查,怀疑是mod_wsgi未使用正确的Python版本(容器内同时存在Python3.7和Python3.10)。

相关配置

Dockerfile

FROM python:3.10-slim-buster

RUN apt-get update && apt-get install -y apache2 libapache2-mod-wsgi-py3
WORKDIR /app
COPY requirements.txt /app/
RUN pip install -r requirements.txt
COPY morabusa /app/
COPY app.conf /etc/apache2/sites-available/app.conf
RUN a2dissite 000-default.conf && a2ensite app.conf
CMD ["/usr/sbin/apache2ctl", "-D", "FOREGROUND"]

Apache虚拟主机配置(app.conf)

<VirtualHost *:80>

    ServerName morabusa.com

    ErrorLog /app/morabusaprj/logs/error.log                                                   
    CustomLog /app/morabusaprj/logs/access.log combine

    <Directory /app>                                                                                               
            Require all granted
    </Directory>

    WSGIScriptAlias / /app/morabusaprj/wsgi.py

</VirtualHost>

wsgi.py配置

import os
import sys

sys.path.append('/app')
sys.path.append('/app/morabusaprj')

from django.core.wsgi import get_wsgi_application

os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'morabusaprj.settings')

application = get_wsgi_application()

报错信息

[Wed Feb 08 17:57:56.488523 2023] [wsgi:error] [pid 9:tid 140315142702848] [client 192.168.1.33:60062] mod_wsgi (pid=9): Failed to exec Python script file '/app/morabusaprj/wsgi.py'.
[Wed Feb 08 17:57:56.488574 2023] [wsgi:error] [pid 9:tid 140315142702848] [client 192.168.1.33:60062] mod_wsgi (pid=9): Exception occurred processing WSGI script '/app/morabusaprj/wsgi.py'.
[Wed Feb 08 17:57:56.488622 2023] [wsgi:error] [pid 9:tid 140315142702848] [client 192.168.1.33:60062] Traceback (most recent call last):
[Wed Feb 08 17:57:56.488633 2023] [wsgi:error] [pid 9:tid 140315142702848] [client 192.168.1.33:60062]   File "/app/morabusaprj/wsgi.py", line 17, in <module>
[Wed Feb 08 17:57:56.488635 2023] [wsgi:error] [pid 9:tid 140315142702848] [client 192.168.1.33:60062]     from django.core.wsgi import get_wsgi_application
[Wed Feb 08 17:57:56.488644 2023] [wsgi:error] [pid 9:tid 140315142702848] [client 192.168.1.33:60062] ModuleNotFoundError: No module named 'django'

容器内Python版本情况

root@fd5605c69de5:/app/morabusaprj/logs# whereis python

python: /usr/bin/python3.7m /usr/bin/python3.7 /usr/lib/python3.7 /etc/python3.7 /usr/local/bin/python /usr/local/bin/python3.10-config /usr/local/bin/python3.10 /usr/local/lib/python3.10 /usr/local/lib/python3.7
解决方案

问题核心是系统包libapache2-mod-wsgi-py3基于Python3.7编译,而Django安装在Python3.10环境中,导致mod_wsgi无法找到对应依赖。以下两种方法可解决:

方法1:从源码编译适配Python3.10的mod_wsgi

修改Dockerfile,替换默认安装mod_wsgi的步骤,改为用pip安装并配置适配当前Python版本的模块:

FROM python:3.10-slim-buster

# 安装编译依赖
RUN apt-get update && apt-get install -y apache2 apache2-dev gcc python3-dev
WORKDIR /app
COPY requirements.txt /app/
RUN pip install -r requirements.txt
# 安装并配置适配Python3.10的mod_wsgi
RUN pip install mod_wsgi
RUN mod_wsgi-express install-module > /etc/apache2/mods-available/wsgi.load
RUN a2enmod wsgi
# 原有后续步骤
COPY morabusa /app/
COPY app.conf /etc/apache2/sites-available/app.conf
RUN a2dissite 000-default.conf && a2ensite app.conf
CMD ["/usr/sbin/apache2ctl", "-D", "FOREGROUND"]

方法2:在Apache配置中指定Python环境路径

在app.conf中添加WSGI配置项,明确指定Python3.10的环境和包路径:

<VirtualHost *:80>
    ServerName morabusa.com

    ErrorLog /app/morabusaprj/logs/error.log                                                   
    CustomLog /app/morabusaprj/logs/access.log combine

    # 指定Python环境及依赖路径
    WSGIPythonHome /usr/local/bin/python3.10
    WSGIPythonPath /app:/usr/local/lib/python3.10/site-packages

    <Directory /app>                                                                                               
            Require all granted
    </Directory>

    WSGIScriptAlias / /app/morabusaprj/wsgi.py
</VirtualHost>

验证方法

容器启动后,进入容器执行以下命令,确认mod_wsgi使用的是Python3.10:

mod_wsgi-express module-config

输出内容应包含Python3.10的路径,而非3.7。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 03:01:00