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

部署Django项目至Heroku时出现backports.zoneinfo编译失败错误求助

解决Heroku部署Django时backports.zoneinfo编译失败的问题

这个问题的核心原因很明确:Python 3.10及以上版本已经内置了zoneinfo标准库,而你当前的依赖里直接指定了backports.zoneinfo,这个包的旧版本(比如你用的0.2.1)和Python 3.10的C API不兼容,导致在Heroku编译时出现_PyLong_One未定义的错误。

而你本地安装没问题,大概率是因为本地用的是Python 3.9或更低版本,这些版本确实需要backports.zoneinfo来提供zoneinfo功能。

下面是具体的修复步骤:

1. 修正requirements.txt的依赖声明

打开你的requirements.txt,找到backports.zoneinfo==0.2.1这一行,替换成带Python版本条件的声明:

backports.zoneinfo==0.2.1; python_version < "3.10"

这样Heroku的Python 3.10环境会自动跳过这个包的安装,而本地低于3.10的Python环境依然会正常安装它。

2. 确保代码导入兼容所有Python版本

如果你的Django代码里有直接导入backports.zoneinfo的地方,改成兼容的导入方式:

try:
    # Python 3.10+ 用内置的zoneinfo
    from zoneinfo import ZoneInfo
except ImportError:
    # 旧版本用backport
    from backports.zoneinfo import ZoneInfo

这样不管是本地还是Heroku环境,代码都能正常运行。

3. 重新提交并部署

完成上面的修改后,提交代码并重新推送到Heroku:

git add requirements.txt
git commit -m "Fix backports.zoneinfo compatibility for Python 3.10"
git push heroku main

另外,如果你更希望指定特定的Python版本(比如3.9),也可以在项目根目录创建一个runtime.txt文件,内容写:

python-3.9.16

不过推荐用前面的兼容方案,这样你的项目能适配更多Python版本。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.28 16:52:41