Heroku未识别已配置的DJANGO_SETTINGS_MODULE,Django部署失败
workout.settings模块的问题 首先咱们拆解下你遇到的问题:明明已经设置了DJANGO_SETTINGS_MODULE=workout.settings.production,本地运行完全正常,但Heroku却报错找不到workout.settings模块。这大概率是Python包结构识别问题或者项目文件路径配置不对,下面是具体的排查和解决步骤:
1. 给settings目录添加__init__.py文件
Python要把一个文件夹识别为可导入的包,必须要有__init__.py文件(哪怕是空的)。你的settings目录目前只有production.py和development.py,缺少这个关键文件,导致Heroku无法识别workout.settings这个子包。
解决方法:
在workout/settings/目录下创建一个空的__init__.py文件,然后提交到git:
touch workout/settings/__init__.py git add workout/settings/__init__.py git commit -m "Add __init__.py to settings directory"
2. 确认manage.py的位置和内容
manage.py应该放在项目根目录(也就是包含workout文件夹的那个目录),而不是workout文件夹内部。如果位置错了,Python的模块搜索路径会混乱,导致找不到workout.settings。
正确的项目结构应该是这样:
你的项目根目录/ ├── workout/ │ ├── settings/ │ │ ├── __init__.py │ │ ├── production.py │ │ └── development.py │ ├── __init__.py │ ├── urls.py │ └── wsgi.py └── manage.py
同时检查manage.py的内容,确保默认的settings路径正确:
#!/usr/bin/env python import os import sys if __name__ == "__main__": # 默认用开发环境配置,Heroku的环境变量会覆盖这个值 os.environ.setdefault("DJANGO_SETTINGS_MODULE", "workout.settings.development") try: from django.core.management import execute_from_command_line except ImportError as exc: raise ImportError( "Couldn't import Django. Are you sure it's installed and " "available on your PYTHONPATH environment variable? Did you " "forget to activate a virtual environment?" ) from exc execute_from_command_line(sys.argv)
3. 检查git是否正确包含必要文件
确保__init__.py没有被.gitignore排除。打开你的.gitignore文件,看看有没有类似__init__.py的规则,如果有就删掉,然后重新提交文件。
4. 重置Heroku缓存(可选)
有时候Heroku会缓存旧的依赖或文件结构,导致新文件不生效。可以先清空缓存再推送:
heroku repo:purge_cache git push heroku master
为什么本地正常但Heroku报错?
本地运行时,你是在正确的项目根目录下执行命令,Python会自动把当前目录加入模块搜索路径;而Heroku部署时,它会按照git的根目录设置Python路径,如果包结构不完整(比如缺少__init__.py),就会出现导入失败的问题。
内容的提问来源于stack exchange,提问作者Sahand

