部署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
相关产品推荐
相关产品推荐

