在Spyder中导入Basemap时出现RuntimeError的解决请求
我之前也碰到过几乎一模一样的问题,这个错误本质是pyximport模块干扰了basemap的C扩展文件导入流程导致的。下面是几个亲测有效的解决办法,你可以按顺序试试:
方法一:临时禁用pyximport的导入钩子
在你的代码开头添加几行代码,先让pyximport别插手basemap的导入:
import sys # 检查pyximport是否已加载,如果是就禁用它的find_module方法 if 'pyximport' in sys.modules: sys.modules['pyximport'].find_module = None # 现在再导入basemap就不会报错了 from mpl_toolkits.basemap import Basemap, shiftgrid, cm
这个方法可以快速绕过冲突,适合临时救急。
方法二:用conda重新安装basemap(推荐)
很多时候pip安装的basemap会有依赖兼容问题,用conda-forge的包会更稳定:
- 打开Anaconda Prompt(或者你的终端,激活对应的conda环境)
- 先卸载现有版本:
conda uninstall basemap -y
- 从conda-forge安装:
conda install -c conda-forge basemap -y
安装完成后,重启Spyder再运行代码,大概率能解决问题。
方法三:确认Spyder使用的是正确的conda环境
有时候你在某个conda环境装了basemap,但Spyder默认用的是base环境,也会导致导入失败:
- 打开Spyder,点击顶部菜单栏的
工具->偏好设置 - 选择
Python解释器,切换到你安装了basemap的那个conda环境 - 重启Spyder后再测试导入
附你遇到的错误信息:
File "
", line 1, in runfile('C:/Users/Isa/Documents/Freedman/2018/ENVIROCOMP/Stationplots.py', wdir='C:/Users/Isa/Documents/Freedman/2018/ENVIROCOMP')
File "C:\ProgramData\Anaconda3\lib\site-packages\spyder\utils\site\sitecustomize.py", line 710, in runfile execfile(filename, namespace)
File "C:\ProgramData\Anaconda3\lib\site-packages\spyder\utils\site\sitecustomize.py", line 101, in execfile exec(compile(f.read(), filename, 'exec'), namespace)
File "C:/Users/Isa/Documents/Freedman/2018/ENVIROCOMP/Stationplots.py", line 15, in from mpl_toolkits.basemap import Basemap, shiftgrid, cm
File "", line 971, in _find_and_load
File "", line 951, in _find_and_load_unlocked
File "", line 890, in _find_spec
File "", line 864, in _find_spec_legacy
File "C:\ProgramData\Anaconda3\lib\site-packages\pyximport\pyximport.py", line 253, in find_module fp, pathname, (ext,mode,ty) = imp.find_module(fullname,package_path)
File "C:\ProgramData\Anaconda3\lib\imp.py", line 271, in find_module "not {}".format(type(path)))
RuntimeError: 'path' must be None or a list, not <class '_frozen_importlib_external._NamespacePath'>
内容的提问来源于stack exchange,提问作者kyi154

