Heroku部署遇ModuleNotFoundError: No module named 'animals.wsgi'问题求助
animals.wsgi模块的问题 从你的错误日志来看,核心问题是ModuleNotFoundError: No module named 'animals.wsgi'——Gunicorn没法定位到你的WSGI模块,这通常是项目结构、路径配置或者部署文件位置的问题,给你几个具体的排查和解决步骤:
1. 确认项目目录结构是否合规
首先要保证你的Django项目结构符合标准,animals应该是你的Django项目根包,里面必须包含wsgi.py和__init__.py(哪怕是空文件),正确的结构大概是这样:
your-project-root/ ├── animals/ │ ├── __init__.py │ ├── wsgi.py │ ├── settings.py │ └── urls.py ├── Procfile ├── requirements.txt └── manage.py
如果wsgi.py不在animals目录下,或者目录名拼写错误(比如写成animal少了s),都会触发这个错误。
2. 检查Procfile的位置和命令路径
Procfile必须放在项目的根目录(和manage.py同层级),Heroku会从这个目录启动进程。如果你的animals目录不在根目录下(比如嵌套在src文件夹里),那Gunicorn的命令就得调整路径,比如:
web: gunicorn src.animals.wsgi:application --log-file - --log-level debug
3. 验证Python路径是否包含项目根
有时候Heroku的Python环境不会自动把项目根目录加入sys.path,你可以临时在wsgi.py里加几行代码排查:
import sys import os print("Current sys.path:", sys.path) # 如果根目录不在里面,手动添加 sys.path.append(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
部署后看日志里的路径输出,确认项目根目录是否在列表里。也可以直接通过Heroku设置环境变量来指定:
heroku config:set PYTHONPATH=/app
(/app是Heroku容器里的项目根目录,大部分情况是对的)
4. 本地先复现并解决问题
不要直接部署到Heroku试错,先在本地运行和Procfile里完全一样的命令:
gunicorn animals.wsgi:application --log-file - --log-level debug
如果本地也报同样的错误,那问题肯定在本地的项目结构或路径上,先在本地调试好,再推送到Heroku,能节省很多时间。
5. 检查Heroku上的实际文件结构
有时候可能是部署时文件没有正确上传,你可以通过Heroku的终端查看容器里的文件:
heroku run bash # 进入后查看根目录文件 ls -la # 进入animals目录看有没有wsgi.py cd animals && ls -la
如果发现animals目录不存在或者wsgi.py缺失,那就是代码推送的问题,检查.gitignore有没有误排除了相关文件,或者确认推送的分支是正确的。
内容的提问来源于stack exchange,提问作者tango ward

