Ubuntu部署Django遇ModuleNotFoundError: No module named 'photo_app.wsgi'问题
问题排查方案
核心矛盾分析
你配置的Gunicorn目标是passport_photo_maker.wsgi:application,但报错提示找不到photo_app.wsgi,说明实际执行时Gunicorn被引导去加载photo_app下的wsgi模块,而非你指定的passport_photo_maker模块,重点排查以下几个点:
1. 检查wsgi.py文件内容
打开passport_photo_maker/wsgi.py,确认内容是否为标准Django配置,避免误导入photo_app的wsgi模块:
错误示例:
# 错误写法:误导入photo_app的wsgi模块 from photo_app.wsgi import application
正确写法:
import os from django.core.wsgi import get_wsgi_application os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'passport_photo_maker.settings') application = get_wsgi_application()
2. 确认systemd服务的WorkingDirectory配置
检查你的gunicorn.service文件,确保WorkingDirectory指向项目根目录(即包含manage.py的目录),示例配置:
[Service] WorkingDirectory=/var/www/passport_photo_maker ExecStart=/path/to/your/venv/bin/gunicorn --workers 3 passport_photo_maker.wsgi:application
如果WorkingDirectory设置错误,Gunicorn会在错误路径下查找模块,触发非预期的模块查找逻辑。
3. 验证虚拟环境路径配置
确保systemd服务的ExecStart调用的是项目专属虚拟环境中的Gunicorn,而非系统全局版本。全局环境未安装项目依赖或模块路径关联错误,可能导致模块查找混乱。
4. 检查项目目录结构
确认项目符合Django标准结构,确保配置模块passport_photo_maker包含__init__.py(Python将其识别为可导入模块的标志):
# 正确的项目结构 项目根目录/ ├── manage.py ├── passport_photo_maker/ # 配置模块 │ ├── __init__.py │ ├── settings.py │ ├── wsgi.py │ └── urls.py └── photo_app/ # 业务应用模块 ├── __init__.py ├── models.py └── views.py
5. 手动测试Gunicorn启动
在项目根目录下激活虚拟环境,手动执行Gunicorn命令验证:
source /path/to/your/venv/bin/activate gunicorn passport_photo_maker.wsgi:application
如果手动启动正常,说明问题出在systemd服务配置;如果手动启动也报错,继续排查模块路径或wsgi文件内容。
内容的提问来源于stack exchange,提问作者Gopi Kumar Kaushik
相关产品推荐
相关产品推荐

