You need to enable JavaScript to run this app. 为何Python Discord Bot部署到Heroku时编译失败?
优惠活动
大模型
产品
解决方案
定价
更多

为何Python Discord Bot部署到Heroku时编译失败?

问题核心原因

guesslang 2.0.1 内置强制绑定依赖 tensorflow==2.2.0,本地运行正常是因为本地操作系统、Python版本刚好匹配该版本tensorflow的安装包;但Heroku的构建环境默认不满足该依赖的匹配要求,因此检索不到对应安装包,最终导致部署失败。
常见的不匹配原因有两点:

  • Heroku 默认拉取最新的稳定Python版本(当前为3.11/3.12),而 tensorflow==2.2.0 最高仅支持 Python 3.8,没有适配高版本Python的预编译安装包
  • 该版本tensorflow未提供对应Heroku构建栈的可用wheel包
可行解决方法

方案一:指定适配的Python版本

  • 在项目根目录新增 runtime.txt 文件,写入内容:python-3.8.18,这是Heroku官方支持的、可兼容tensorflow 2.2.0的Python 3.8系列稳定版本
  • 重新提交代码触发部署,构建过程会自动使用Python 3.8环境,可检索到对应tensorflow 2.2.0的安装包
  • 注意:带tensorflow的依赖包整体体积较大,需要确认Heroku应用的slug大小、dyno内存配额足够支撑运行(普通Eco级dyno仅512M内存,大概率会出现运行时内存溢出)

方案二:跳过guesslang的强制版本绑定

如果不想降级Python版本,可以调整requirements.txt的依赖顺序,跳过guesslang的自动依赖安装,复用手动指定的高版本tensorflow:

git+https://github.com/Rapptz/discord.py
PyNaCl==1.3.0
dnspython==1.16.0
pandas
async-timeout==3.0.1
pip
youtube_dl
colorlog
pyjokes
howdoi
# 先指定适配当前Python版本的tensorflow版本
tensorflow==2.13.0
# 跳过guesslang的自动依赖安装,复用上面指定的tensorflow
guesslang --no-deps

只要指定的tensorflow版本API兼容guesslang的调用逻辑,即可正常运行,且不需要降级Python版本。

方案三:替换轻量语言检测库(最推荐)

guesslang是基于深度学习的语言检测工具,自带的tensorflow依赖体积超过500M,非常容易触发Heroku的slug大小限制、运行时内存溢出问题。对于Discord Bot这类轻量应用来说,该依赖的成本过高,可直接替换为同功能的轻量库:

  • 移除requirements.txt中的guesslang行
  • 新增轻量语言检测库依赖:langdetect==1.0.9
    整体依赖体积会大幅缩减,几乎不会出现部署适配问题。

内容的提问来源于stack exchange,提问作者Aditya Tomar

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.31 20:15:04