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

Python2迁移Python3时django-earthdistance包报six导入错误如何解决

django-earthdistance 导入six错误最优解决方案

报错核心原因:Django 3.0及以上版本移除了内置的django.utils.six兼容模块,而django-earthdistance包多年未更新,仍依赖该旧版本Django的内置模块,所以在Python3.8+搭配新Django版本的环境下无法运行。

以下方案按优先级从高到低排序:

方案1:替换为Django原生GIS模块(最优长期方案)

你使用的是PostgreSQL数据库,Django官方内置的django.contrib.gis模块原生支持PostGIS扩展的经纬度距离计算,完全可以替代django-earthdistance的所有功能,且官方长期维护,兼容所有新的Python、Django版本。
操作步骤:

  • 卸载旧依赖包:pip uninstall django-earthdistance
  • 确认PostgreSQL已安装PostGIS扩展,在Django配置文件中添加django.contrib.gis到INSTALLED_APPS,数据库ENGINE改为django.contrib.gis.db.backends.postgis
  • 原有代码中EarthDistance、LlToEarth的用法可以直接替换为GIS模块的Distance等原生函数,功能完全覆盖,性能更优。

方案2:临时兼容修复(短期过渡用)

如果暂时不想改动业务代码,可以通过导入映射快速修复报错:

  • 先单独安装six库:pip install six
  • 在项目根目录的__init__.py文件中添加如下代码,将缺失的django.utils.six映射到独立安装的six库:
import sys
import six
sys.modules['django.utils.six'] = six

注意:该方案仅为临时过渡,老包无后续维护,后续可能出现其他兼容性问题,不建议长期使用。

方案3:使用社区维护的Fork版本

可以直接安装社区开发者修复了兼容性问题的django-earthdistance Fork版本,无需改动原有业务代码,适配Python3+和新Django版本。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 04:24:03