Apache部署Django出现Target WSGI script cannot be loaded错误如何解决
Django+Apache部署ModuleNotFoundError问题排查与解决
错误核心原因是mod_wsgi运行的Python环境未识别到已安装的Django依赖,可按以下步骤排查解决:
排查步骤
- 确认mod_wsgi与Django安装的Python版本一致:
mod_wsgi是绑定特定Python版本编译的,系统存在多Python版本时极易出现版本不匹配问题。执行对应命令确认版本:- Debian/Ubuntu:
dpkg -l | grep libapache2-mod-wsgi - CentOS/RHEL:
rpm -qa | grep mod_wsgi
再执行你安装Django时使用的Python命令确认Django安装路径,例如用Python3.6就执行:python3.6 -m pip show django,查看输出的Location字段是否和你配置里的/home/preinstall/.local/lib/python3.6/site-packages一致。
- Debian/Ubuntu:
- 验证Django安装路径权限:
Apache运行用户(默认一般为www-data、apache)需要有Django安装路径的读取、进入权限,执行namei -l /home/preinstall/.local/lib/python3.6/site-packages/django检查每一级目录的other权限是否包含r和x权限。 - 检查是否存在全局Python路径覆盖:
查看Apache主配置文件(apache2.conf/httpd.conf)中是否配置了全局WSGIPythonPath参数,该参数会覆盖虚拟主机内配置的python-path,若存在可删除全局配置,优先使用虚拟主机级别配置。
解决方案
- 版本不匹配时重装对应版本mod_wsgi:
例如使用Python3的场景,Debian/Ubuntu可执行apt install libapache2-mod-wsgi-py3,也可直接用对应版本pip安装mod_wsgi后手动配置Apache加载对应模块。 - 虚拟环境场景修正配置:
如果你是用Python虚拟环境安装的Django,不要手动写site-packages路径,直接用python-home参数指定虚拟环境根目录即可,配置示例:WSGIDaemonProcess preinstall python-home=/home/preinstall/你的虚拟环境目录 python-path=/home/preinstall/hx_preinstaller - 权限不足时修正目录权限:
执行以下命令给目录补全权限:chmod o+x /home/preinstall /home/preinstall/.local /home/preinstall/.local/lib /home/preinstall/.local/lib/python3.6 /home/preinstall/.local/lib/python3.6/site-packages
所有配置修改完成后重启Apache生效:
- Debian/Ubuntu:
systemctl restart apache2 - CentOS/RHEL:
systemctl restart httpd
内容的提问来源于stack exchange,提问作者tony
相关产品推荐
相关产品推荐

