Heroku部署Python应用时psycopg2构建wheel包失败如何解决?
问题根因
该错误由低版本psycopg2/psycopg2-binary与Python 3.9及以上版本不兼容导致:Python 3.9之后不再对外公开内部结构体PyInterpreterState的成员,旧版psycopg2的源码直接引用了该结构体成员,因此编译时GCC抛出类型不完整的报错,最终部署流程终止。
可执行的解决办法
- 方案1:升级psycopg2依赖版本(最推荐)
修改项目根目录下的requirements.txt文件,将原有psycopg2/psycopg2-binary的版本约束调整为2.9.1及以上,示例写法:
psycopg2-binary>=2.9.1
高版本psycopg2已经官方修复了对Python 3.9+的兼容性问题,无需调整其他配置,修改后提交代码重新推送即可。
- 方案2:指定Heroku使用低版本Python(临时过渡方案)
如果你的项目暂时无法适配高版本psycopg2,可以在项目根目录新建runtime.txt文件,手动指定Heroku使用兼容旧版psycopg2的Python版本,示例写法:
python-3.8.17
注意Heroku会定期下线老旧的Python运行时版本,该方案仅适合临时救急,不建议长期使用。
- 方案3:替换为新一代psycopg3依赖
如果你的项目正在做功能迭代,也可以直接替换为psycopg的新一代版本psycopg3,在requirements.txt中写入如下依赖即可:
psycopg[binary]>=3.0.0
psycopg3性能更优,对高版本Python的兼容性也更稳定。
内容的提问来源于stack exchange,提问作者mister tech
相关产品推荐
相关产品推荐

