Heroku部署Django时找不到settings模块但本地运行正常该如何解决?
问题原因
你本地运行wsgi.py时,执行路径是wsgi.py和settings.py所在的子目录,Python会自动将当前工作目录加入模块搜索路径,因此直接声明DJANGO_SETTINGS_MODULE = 'settings'可以正常识别。但Heroku部署后启动应用的工作目录是项目根目录(即包含manage.py的顶层目录),此时Python模块搜索路径未包含settings.py所在的子目录,因此抛出ModuleNotFoundError。
解决方法
你可以任选以下一种方案修复:
- 方案1(推荐,符合Django官方规范):修改wsgi.py中的设置模块路径,加上
settings.py所在的子目录名作为前缀。假设你的子目录名为myproject(可从你的项目目录结构中确认,即和wsgi.py同层级的父文件夹名),将对应行修改为:os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'myproject.settings') - 方案2:在wsgi.py中主动将
settings.py所在目录加入Python模块搜索路径,在设置DJANGO_SETTINGS_MODULE之前新增一行代码即可:import os import sys # 新增这一行,将wsgi.py所在目录加入搜索路径 sys.path.insert(0, os.path.dirname(os.path.abspath(__file__))) from django.core.wsgi import get_wsgi_application os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'settings') application = get_wsgi_application()
修改后重新推送部署即可,同时可以顺带检查项目根目录下的Procfile配置,确认web命令指向的wsgi应用路径正确,示例配置参考:
web: gunicorn myproject.wsgi
内容的提问来源于stack exchange,提问作者MyDisplay
相关产品推荐
相关产品推荐

