You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

部署Django应用至Heroku遇错误:wrapt==1.12.1不适用于heroku-18栈

问题原因与解决方法

我之前也踩过Heroku旧栈的依赖兼容坑,这个问题其实很好拆解:

为什么会出现这个错误?

Heroku-18栈基于Ubuntu 18.04,这个系统版本比较老,而wrapt==1.12.1的预编译二进制包(wheel)没有适配这个旧系统的架构;同时Heroku默认的Python buildpack在编译源码版本时,缺少必要的系统编译依赖(比如gcc、Python开发头文件),导致pip无法成功编译安装这个版本的wrapt,最终抛出“不适用于当前栈”的错误。

另外,如果你是直接在requirements.txt里硬指定了wrapt==1.12.1,而没有考虑栈的兼容性,也会触发这个问题——毕竟新版本的wrapt已经修复了旧系统的兼容问题,但旧版本没有对应的预编译包。

具体解决方法

根据你的需求,有三个可行方案,按优先级排序:

1. 升级wrapt到兼容版本

这是最简单的解决方式,大多数情况下不需要死守旧版本。你可以:

  • 本地运行pip install wrapt>=1.13.0(1.13.x及以上版本都适配heroku-18)
  • 更新requirements.txt里的wrapt版本号为wrapt>=1.13.0或者具体的兼容版本(比如wrapt==1.14.1)
  • 重新提交代码并部署到Heroku,这个时候pip会找到适配heroku-18的预编译包,顺利安装。

2. 为旧版本wrapt添加编译依赖

如果你因为某些原因必须使用wrapt==1.12.1,那需要让Heroku安装编译源码所需的系统依赖:

  • 在项目根目录创建一个名为Aptfile的文件,内容写入:
    python-dev
    gcc
    
  • 给Heroku添加apt buildpack(用来安装系统包):
    heroku buildpacks:add --index 1 heroku-community/apt
    
  • 提交Aptfile并重新部署,此时Heroku会先安装gcc和Python开发头文件,再编译wrapt的源码,就能成功安装了。

3. 升级Heroku栈到更高版本

如果你的应用没有依赖只能在heroku-18上运行的组件,建议直接升级Heroku栈到更新的版本(比如heroku-22,基于Ubuntu 22.04),这样能从根本上解决很多旧依赖的兼容问题:

  • 运行命令切换栈:
    heroku stack:set heroku-22
    
  • 重新部署应用,新版本的栈支持更多现代Python包的预编译轮子,wrapt的安装会顺畅很多。

补充:如果你的完整错误信息是类似“Failed to install packages: wrapt==1.12.1 is not compatible with this stack (heroku-18)”或者找不到匹配的发行版,上面的方案都能解决。

内容的提问来源于stack exchange,提问作者AL Drake

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.09 12:07:31