Django uWSGI部署报ModuleNotFoundError: No module named 'project_name'如何解决
报错原因
- 权限问题:项目存放在/root目录下,该目录默认仅root用户拥有访问权限,uWSGI进程默认以www-data用户运行,无权限读取项目文件,导致无法识别project_name模块。
- 缺少Python搜索路径配置:uWSGI默认不会自动将项目根目录加入Python的模块搜索路径,即使权限正常也可能无法找到项目根目录下的project_name包。
- 若你使用了虚拟环境,未在uWSGI配置中指定虚拟环境路径,会导致uWSGI使用系统Python环境,也可能出现模块找不到的问题。
修复步骤
- 迁移项目到合理的服务目录(强烈推荐,避免root目录安全风险)
执行以下命令移动项目并配置权限:
# 移动项目到/var/www目录下 mv /root/project_name /var/www/ # 给uWSGI运行用户分配项目目录所有权 chown -R www-data:www-data /var/www/project_name # 配置目录权限确保可正常读写 chmod -R 755 /var/www/project_name
- 修改uWSGI配置文件
/etc/uwsgi/apps-enabled/django.ini,调整路径并补充缺失配置:
[uwsgi] chdir = /var/www/project_name # 新增:将项目根目录加入Python模块搜索路径 pythonpath = /var/www/project_name env = DJANGO_SETTINGS_MODULE=project_name.settings.production wsgi-file = project_name/wsgi.py workers = 1 plugins = python3 # 新增:指定uWSGI进程运行的用户和组,避免权限问题 uid = www-data gid = www-data # 如果使用了虚拟环境,新增以下配置,替换为你的虚拟环境实际路径 # virtualenv = /path/to/your/virtualenv
- 重启uWSGI服务验证修复:
service uwsgi restart
重启后查看/var/log/uwsgi/app/django.log日志,确认无模块缺失报错即可。
内容的提问来源于stack exchange,提问作者tkeDta
相关产品推荐
相关产品推荐

