使用Heroku CLI部署Django项目时遇ImportError: No module named 'decouple'
嘿,看你贴的报错,这绝对是Django部署Heroku时最常踩的坑之一!我帮身边好几个开发者排查过类似问题,给你列几个大概率能解决的方向:
1. 先核对静态文件核心配置
打开你的settings.py,务必确认这几个配置没出错:
- 必须设置
STATIC_ROOT = os.path.join(BASE_DIR, 'staticfiles'),Heroku默认会从这个目录读取静态文件 STATIC_URL = '/static/'这个配置不能乱改- 确保
django.contrib.staticfiles在INSTALLED_APPS列表里
2. 补上必要的环境变量
Heroku上部署Django必须把DEBUG设为False,但如果没配置SECRET_KEY或者数据库连接,collectstatic会直接罢工。用Heroku CLI补一下:
# 设置和本地一致的密钥 heroku config:set SECRET_KEY="your-secret-key-here" # 关闭DEBUG模式(生产环境必须这么做) heroku config:set DEBUG=False
3. 确认依赖是否齐全
Heroku官方推荐用whitenoise处理静态文件,要是你的requirements.txt里没加它,赶紧补上:
whitenoise==6.4.0 # 可以换成最新稳定版本
同时要在settings.py的MIDDLEWARE里加上它,位置很关键:
MIDDLEWARE = [ 'django.middleware.security.SecurityMiddleware', 'whitenoise.middleware.WhiteNoiseMiddleware', # 必须放在这一行后面! # 其他中间件... ]
另外注意:你报错里显示用的是Python3.5,这个版本太老了,建议在runtime.txt里指定一个兼容的新版本,比如python-3.11.4,避免版本不兼容导致的奇怪问题。
4. 手动指定collectstatic执行逻辑(可选)
如果Heroku自动执行的collectstatic还是有问题,可以在Procfile里明确写出来执行顺序:
web: python manage.py collectstatic --noinput && gunicorn your_project_name.wsgi
记得把your_project_name换成你实际的项目名称(就是存wsgi.py的那个文件夹)
你贴的报错信息:
remote: -----> $ python manage.py collectstatic --noinput
remote: Traceback (most recent call last):
remote: File "manage.py", line 15, in <module>
remote: execute_from_command_line(sys.argv)
remote: File "/app/.heroku/python/lib/python3.5/site-packages/django/core/management/init.py", lin...
内容的提问来源于stack exchange,提问作者sphoenix

