Django项目部署Heroku报错:与Python Buildpack不兼容求助
问题拆解与解决方案
看起来你踩了Heroku部署Django时两个典型的坑——文件层级不符合检测规则,再加上依赖版本冲突且不兼容,这才导致了buildpack识别失败的错误。我来帮你一步步解决:
核心问题分析
1. 项目文件放错了位置
Heroku的Python buildpack是从你的Git仓库根目录查找requirements.txt、Pipfile这类标识文件来识别Python项目的。但从你的目录结构来看,manage.py、Pipfile这些核心文件都藏在了内层的my-project子目录里(和.git同级的是外层my-project),buildpack根本找不到它们,自然会判定项目“不兼容”。
2. 依赖版本存在严重问题
- 你使用的是Python2.7,但
Pipfile里指定了django==2.0——Django2.0及以上版本完全不支持Python2.7,仅兼容Python3.5+,这会直接导致部署失败 Pipfile和requirements.txt里的Django版本还不一致(一个2.0,一个1.8.18),Heroku会优先使用Pipfile/Pipfile.lock,这种版本冲突必然引发依赖安装问题
具体修复步骤
第一步:调整核心文件的位置
把内层my-project目录下的manage.py、Pipfile、Procfile、requirements.txt、runtime.txt、.env这些文件,全部移动到和.git文件夹同级的位置(也就是外层my-project目录下)。调整后的目录结构应该是这样:
-- .git/ -- my-project/ # 保留原来的内层app目录及子应用 ---- some-app-dir/ ---- some-app-dir/ ---- __init__.py -- .env -- db.sqlite3 -- manage.py -- Pipfile -- Pipfile.lock -- Procfile -- requirements.txt -- runtime.txt
第二步:修正Procfile的WSGI路径
原来的Procfile写的是web: gunicorn py-mosaic-image.wsgi --log-file -,现在需要改成你实际的项目WSGI模块路径。假设你的内层app目录叫my-project,修改后的Procfile应该是:
web: gunicorn my-project.wsgi --log-file -
第三步:统一并修正依赖版本
因为你使用Python2.7,只能选择Django 1.x系列(最高1.11.x,这是支持Python2.7的最后一个Django大版本):
- 编辑
Pipfile,把Django版本改成兼容的:
[packages] dj-database-url = "==0.4.2" django = "==1.11.29" # 选择Python2.7兼容的最新Django1.11版本 gunicorn = "==19.7.1" "psycopg2" = "==2.7.3.2" whitenoise = "==3.3.1"
- 要么同步
requirements.txt的版本,要么直接删除它(Heroku会优先使用Pipfile/Pipfile.lock),避免版本冲突 - 重新生成
Pipfile.lock:
pipenv lock
第四步:重新部署
把所有修改提交到Git,然后push到Heroku:
git add . git commit -m "Fix project structure and dependency issues for Heroku deploy" git push heroku master
内容的提问来源于stack exchange,提问作者colman423
相关产品推荐
相关产品推荐

