部署GeoDjango到Heroku遇python setup.py egg_info及GDAL错误求助
解决GeoDjango部署Heroku的GDAL相关错误
核心问题分析
- GDAL版本不兼容:GDAL 2.4.2是旧版本,不支持Python3.8+,且其setup.py中使用的
use_2to3配置在新版setuptools中已被移除,直接导致egg_info生成失败 - numpy依赖顺序异常:GDAL编译过程需要numpy提前就绪,但pip默认依赖解析顺序可能让GDAL先于numpy安装,触发"numpy not available"警告
具体修复步骤
1. 升级GDAL版本并调整依赖顺序
修改requirements.txt,替换旧版GDAL并明确numpy的前置依赖:
# 移除旧版本 # GDAL==2.4.2 # 添加兼容版本,确保numpy先被安装 numpy==1.21.6 GDAL==3.4.3
注:GDAL 3.4.x支持Python3.7-3.10,与你使用的Python3.9.13完全兼容,且已移除对
use_2to3的依赖
2. 清理无用依赖
删除requirements.txt中的pipwin==0.5.2,该工具仅适用于Windows环境,Heroku是Linux环境,无实际作用还可能干扰依赖安装流程
3. 修正Heroku Buildpack顺序
确保Heroku Geo Buildpack是第一个被加载的Buildpack,Python Buildpack紧随其后,执行以下命令:
heroku buildpacks:clear heroku buildpacks:add https://github.com/heroku/heroku-geo-buildpack.git heroku buildpacks:add heroku/python
此操作能保证系统级GDAL库先于Python包安装,避免编译时找不到依赖的问题
4. 验证Geo依赖版本匹配
当前djangorestframework-gis==1.0兼容Django3.2.x和GDAL3.x,无需修改;若后续出现兼容性报错,可升级至djangorestframework-gis==1.2
5. 重新部署
更新配置后提交代码并推送:
git add requirements.txt git commit -m "Fix GDAL compatibility issues for Heroku deployment" git push heroku main
验证修复结果
部署完成后,可通过以下命令确认GDAL和numpy正常工作:
heroku run python -c "import gdal; import numpy; print(f'GDAL版本: {gdal.__version__}, numpy版本: {numpy.__version__}')"
内容的提问来源于stack exchange,提问作者dinc
相关产品推荐
相关产品推荐

