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

