Ubuntu 24.04下Apache2+mod_wsgi部署Django时无法找到settings模块的问题
老哥,我看了你遇到的问题,毕竟用了二十多年的mod_wsgi/Django/Apache,这次Ubuntu 24.04上的坑确实有点烦。从报错里的ModuleNotFoundError: No module named 'ana_access'就能看出来,核心问题是Python的模块搜索路径里没有包含你的Django项目根目录,导致它找不到ana_access这个包(也就是settings所在的目录)。
先理清楚你的目录结构:
你的wsgi.py在/home/peter/django-apps/anaaccess/anaaccess/ana_access/wsgi.py,而ana_access这个包的父目录是/home/peter/django-apps/anaaccess/anaaccess/——这个目录目前不在Python的sys.path里,所以Python找不到这个模块。
给你几个具体的解决步骤:
1. 修改wsgi.py,添加项目根目录到Python路径
打开你的wsgi.py文件,在最开头添加代码把项目根目录加入sys.path,推荐用动态路径的方式(避免硬编码路径,后续迁移更方便):
import os import sys # 动态获取包含ana_access包的父目录 project_root = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) sys.path.append(project_root) # 下面是你原来的代码 import django from django.core.wsgi import get_wsgi_application os.environ["DJANGO_SETTINGS_MODULE"] = "ana_access.settings" application = get_wsgi_application()
如果动态路径的方式你觉得麻烦,也可以直接硬编码路径:
import sys sys.path.append('/home/peter/django-apps/anaaccess/anaaccess')
2. 检查Apache的目录权限
确保Apache的运行用户(通常是www-data)有读取整个项目目录的权限,你可以执行以下命令调整权限:
sudo chown -R www-data:www-data /home/peter/django-apps/anaaccess/anaaccess/ sudo chmod -R 755 /home/peter/django-apps/anaaccess/anaaccess/
3. 重启Apache服务
修改完配置和代码后,一定要重启Apache让改动生效:
sudo systemctl restart apache2
为什么这次会出问题?
Ubuntu 24.04搭配的Apache 2.4.58和Python 3.12,在mod_wsgi的路径处理上可能和你之前用的版本有差异——虚拟环境只是帮你管理依赖包,但项目本身的模块路径不会被自动加入到Python的搜索路径里,所以需要手动添加。
内容来源于stack exchange

