部署Django应用遇ImportError:找不到django.core.wsgi模块
Hey,这个ImportError: no module named django.core.wsgi错误我碰过好多次了,核心原因就是Apache的mod_wsgi进程找不到你安装在用户目录下的Django包。给你几个一步步解决的办法,按顺序试就行:
1. 给mod_wsgi指定Django所在的Python路径
你是用pip install --user django把Django装在了/home/zahlen/.local/lib/site-packages里,但Apache默认用系统全局的Python环境,根本看不到这个用户目录下的包。所以得在VirtualHost配置里明确告诉它路径:
- 打开你的
//apache2/sites-available/000-default.conf,在VirtualHost块里添加:
把WSGIPythonPath /home/zahlen/.local/lib/pythonX.X/site-packages:/home/zahlenpythonX.X换成你实际用的Python版本(比如3.9,可以用python --version查),后面的/home/zahlen是你的项目根目录,也要加上。 - 保存后重启Apache:
sudo systemctl restart apache2
2. 确认mod_wsgi和Python版本匹配
这是很多人忽略的坑:如果你的mod_wsgi是编译给Python2用的,但你用Python3装了Django,肯定找不到模块。
- 运行
mod_wsgi-express module-config,看输出里的Python版本,和你装Django的Python版本对比(比如python --version的结果)。 - 如果版本不匹配,重新安装对应版本的mod_wsgi:用你目标Python的pip执行
pip install mod_wsgi,然后按照文档把新的mod_wsgi模块加载到Apache里。
3. 调试Python路径是否生效
要是前面两步还没解决,可以在项目的wsgi.py开头加几行调试代码,看看mod_wsgi实际能访问的Python路径:
import sys # 把路径打印到Apache错误日志 print('Current sys.path:', sys.path) import django.core.wsgi
然后重启Apache,查看错误日志(一般在/var/log/apache2/error.log),如果里面看不到/home/zahlen/.local/lib/site-packages,说明第一步的WSGIPythonPath配置没生效,检查有没有写错路径或者配置没加载。
4. 确保Apache能访问你的文件
Apache默认用www-data用户运行,要是它没权限读你的项目目录和Django包,也会出现模块找不到的错误:
- 给你的用户目录加可执行权限(让Apache能进入):
chmod o+x /home/zahlen - 给Django所在的site-packages目录加可读权限:
chmod -R o+r /home/zahlen/.local/lib/site-packages/django
一般前两步就能解决问题,要是还不行,再看日志排查权限或者路径的问题。
内容的提问来源于stack exchange,提问作者zahlen
相关产品推荐
相关产品推荐

