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

Apache+mod_wsgi部署Django遇ModuleNotFoundError: No module named 'team_db'

问题描述

目录结构

/var/www下的目录结构:

team_django
--team_db
---- __init__.py
-----settings.py
-----wsgi.py

相关配置文件

wsgi.py 内容

import os

from django.core.wsgi import get_wsgi_application

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

application = get_wsgi_application()

/etc/apache2/mods-available/wsgi.load 配置

LoadModule wsgi_module "/usr/local/py_ptracker/lib/python3.11/site-packages/mod_wsgi/server/mod_wsgi-py311.cpython-311-x86_64-linux-gnu.so"
WSGIPythonHome "/usr/local/py_ptracker"

/etc/apache2/sites-available/vhost.conf 配置

<VirtualHost *:80>
    ServerName      mydomain
WSGIScriptAlias / /var/www/team_django/team_db/wsgi.py

<Directory /var/www/team_django/team_db>
<Files wsgi.py>
Require all granted
</Files>
</Directory>
</VirtualHost>

错误日志信息

Apache error.log 中出现以下错误:

ModuleNotFoundError: No module named 'team_db'
 [wsgi:error] [pid 225277] mod_wsgi (pid=225277): Failed to exec Python script file '/var/www/team_django/team_db/wsgi.py'., referer: ...
[wsgi:error] [pid 225277] mod_wsgi (pid=225277): Exception occurred processing WSGI script '/var/www/team_django/team_db/wsgi.py'., referer: ....

用户疑问

明明项目能在 Django runserver 和 mod_wsgi-express 下正常运行,且 mod_wsgi 是用虚拟环境同版本 Python 编译的,也调整过权限和所有者,为什么 os.environ.setdefault 还是找不到 team_db 模块?


问题原因及解决方法

核心原因是Python 的模块搜索路径(sys.path)未包含 /var/www/team_django 目录,导致 Python 无法识别 team_db 这个包。Django 自带的 runserver 和 mod_wsgi-express 会自动把项目根目录加入搜索路径,但 Apache 下的 mod_wsgi 默认不会做这个操作。

解决方式二选一即可:

  1. 修改 wsgi.py 添加路径
    在 wsgi.py 开头加入代码,手动把项目根目录加入 Python 搜索路径:

    import os
    import sys
    
    # 把项目根目录添加到模块搜索路径
    sys.path.append('/var/www/team_django')
    
    from django.core.wsgi import get_wsgi_application
    
    os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'team_db.settings')
    
    application = get_wsgi_application()
    
  2. 在 Apache 虚拟主机配置中设置 WSGIPythonPath
    在 vhost.conf 的 <VirtualHost> 块内添加路径配置:

    <VirtualHost *:80>
        ServerName      mydomain
        WSGIPythonPath /var/www/team_django
        WSGIScriptAlias / /var/www/team_django/team_db/wsgi.py
    
        <Directory /var/www/team_django/team_db>
            <Files wsgi.py>
                Require all granted
            </Files>
        </Directory>
    </VirtualHost>
    

最后操作

修改完成后,重启 Apache 服务使配置生效:

sudo systemctl restart apache2

额外说明

  • 本次报错和权限无关,若为权限问题,日志会明确提示权限相关错误;
  • 确认 team_db 目录下的 __init__.py 文件存在(你已满足),这是 Python 识别为包的必要条件。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 22:23:16