安装geolocator后导入报cannot import name 'DummyLocator'错误如何解决
geolocator导入报错排查解决方法
报错根因
当前安装的geolocator 0.1.1是2012年就停止维护的废弃第三方包,本身存在两处硬伤,和Python3.6环境完全不兼容:
- 包内部
__init__.py文件使用了Python2风格的绝对导入写法,不符合Python3的导入规则,直接触发cannot import name 'DummyLocator'报错 - 该包依赖的MaxMind离线定位接口早已停止服务,就算修好导入问题,核心定位功能也无法正常使用
解决步骤
- 彻底卸载损坏的废弃包
执行以下命令清除所有残留文件,避免后续导包冲突:
pip uninstall -y geolocator conda remove geolocator
- 安装正常维护的地理定位库
绝大多数场景下需要geolocator定位能力,实际要安装的是持续维护的geopy库,该库兼容Python3.6版本,支持Nominatim、高德、百度、MaxMind等数十种地理编码服务,安装命令:
pip install geopy
如果你在Zeppelin环境运行代码(从报错路径的
zeppelin_python.py可判断当前运行环境),安装完成后必须重启对应notebook的Python kernel,否则会加载旧的包缓存导致报错复现。
- 正确导包使用
geopy的导包路径和废弃的geolocator不同,基础使用示例:
from geopy.geocoders import Nominatim # 初始化定位器 geolocator = Nominatim(user_agent="my_app") location = geolocator.geocode("北京市天安门") print(location.address, location.latitude, location.longitude)
特殊场景处理
如果你有特殊原因必须使用这个废弃的0.1.1版本geolocator,可以手动修改包源码修复导入问题:
- 打开报错路径下的文件:
/opt/anaconda3/lib/python3.6/site-packages/geolocator/__init__.py - 将第一行的导入语句
from geolocator import DummyLocator, MaxMindCityLocator, MaxMindCountryLocator修改为from .geolocator import DummyLocator, MaxMindCityLocator, MaxMindCountryLocator - 保存文件后重新导包即可跳过导入报错,但该包核心功能已失效,不推荐使用该方案。
内容的提问来源于stack exchange,提问作者mohammad hassan bigdeli shamlo
相关产品推荐
相关产品推荐

