Django部署至Heroku失败求助:PostgreSQL版本识别错误
解决Heroku部署Django时psycopg2无法识别PostgreSQL 10.3的问题
嘿,这个问题我之前也碰到过!根源就是旧版本的psycopg2(Python连接PostgreSQL的驱动)对PostgreSQL 10.x系列的版本号识别存在bug,没办法解析10.3这个版本,导致Heroku在构建过程中执行python setup.py egg_info时失败,最终push被拒绝。下面给你几个靠谱的解决办法:
方法一:升级psycopg2到兼容版本
这是最直接有效的方案,因为psycopg2从2.7.0版本开始就已经支持PostgreSQL 10了:
- 打开你的
requirements.txt文件,把原来的psycopg2条目替换成带版本号的兼容版本,或者用预编译的psycopg2-binary(构建更快,适合部署场景):# 要么用预编译的binary版本 psycopg2-binary>=2.7.5 # 要么用源码版的psycopg2(需要编译环境) psycopg2>=2.7.5 - 本地先更新依赖包,确保没问题:
pip install -r requirements.txt - 把修改后的
requirements.txt提交到git:git add requirements.txt git commit -m "Upgrade psycopg2 to support PostgreSQL 10.3" - 最后重新尝试push到Heroku:
git push heroku master
方法二:调整Heroku上的PostgreSQL版本(可选)
如果升级psycopg2后还是有问题,你可以让Heroku使用更稳定且被广泛支持的PostgreSQL版本,比如12或14:
- 先查看当前Heroku上的PostgreSQL插件信息:
heroku addons - 如果已经有postgres插件,直接升级到指定版本(这里以12为例):
heroku addons:upgrade heroku-postgresql:hobby-dev --version=12 - 完成后再次push代码即可。
额外注意事项
- 确保你的Django版本和目标PostgreSQL版本兼容,比如非常老的Django版本(比如1.8以下)可能和PostgreSQL 10+存在兼容性问题,必要时可以升级Django到合适的稳定版本。
- 如果你用的是Pipenv或Poetry管理依赖,记得同步更新
Pipfile或pyproject.toml里的psycopg2版本,不要只修改requirements.txt。
内容的提问来源于stack exchange,提问作者Y A
相关产品推荐
相关产品推荐

