RHEL7部署Django2.0遇'myproject.wsgi'模块未找到错误求助
你遇到的ModuleNotFoundError: No module named 'myproject.wsgi'错误,核心和Gunicorn启动脚本的不完整配置、项目路径映射有关,我帮你梳理几个关键修复点:
1. 补全Gunicorn启动命令(最紧急的问题)
你的gunicorn_start脚本最后一行exec venv/bin/...是不完整的,Gunicorn需要明确指定WSGI入口才能找到Django的启动模块。把这行替换为完整的启动命令:
exec venv/bin/gunicorn ${DJANGO_WSGI_MODULE}:application \ --name $NAME \ --workers $WORKERS \ --user=$USER --group=$GROUP \ --bind=$BIND \ --log-level=$LOGLEVEL \ --log-file=-
这里的${DJANGO_WSGI_MODULE}:application是核心,它告诉Gunicorn加载你配置的garage.wsgi模块里的application对象。
2. 验证项目路径与PYTHONPATH配置
从你的脚本看,DJANGODIR=/opt/garage/garage,需要确认:
- 这个目录下是否确实存在
wsgi.py和settings.py文件? - 如果你的项目结构是
/opt/garage/(根目录)包含garage/(Django配置目录)和venv/,那DJANGODIR应该改为/opt/garage,同时source venv/bin/activate的路径也要对应调整(如果venv在上级目录,要改成source ../venv/bin/activate)。
PYTHONPATH=$DJANGODIR:$PYTHONPATH的作用是让Python找到你的Django模块,确保DJANGODIR是包含garage目录的父级目录,这样import garage.settings才能正常生效。
3. 检查Virtualenv激活路径是否正确
先手动进入/opt/garage/garage目录,执行source venv/bin/activate看看是否能正常激活虚拟环境。如果提示找不到文件,说明你的venv环境创建在上级目录(比如/opt/garage/venv),需要把脚本里的激活命令改为:
source ../venv/bin/activate
4. 确认目录与文件权限
确保user1对以下路径有足够权限:
/opt/garage/garage:读取项目代码文件/opt/garage/run:创建和读写gunicorn.sock文件(可以执行chown -R user1:user1 /opt/garage/run调整权限)
5. 验证WSGI文件内容
打开/opt/garage/garage/wsgi.py,确认内容符合Django 2.0的标准格式:
import os from django.core.wsgi import get_wsgi_application os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'garage.settings') application = get_wsgi_application()
这里的DJANGO_SETTINGS_MODULE必须和你脚本里的配置完全一致。
最后给gunicorn_start脚本添加执行权限:chmod +x gunicorn_start,再尝试启动脚本,应该就能解决模块找不到的问题了。
内容的提问来源于stack exchange,提问作者Phares

