解决Anaconda下安装basemap的问题

前言

本来早就想写Anaconda下安装basemap的问题,但是最近真的太忙了,这里记录如下。

1. 搜索并安装basemap

1.1 方法一:在Anaconda Navigator中下载

打开Navigator,在Environments中的not installed 对应的右边搜索框搜索 basemap,选中搜索结果中第一个(即basemap),点击Apply即可下载。
解决Anaconda下安装basemap的问题_第1张图片

1.2 方法二:在Anaconda Prompt中下载

1)可以在navigator中打开prompt,也可以在电脑左下角搜索栏中搜索Anaconda Prompt打开。

2)先输入:
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/
换成清华源。

再输入:
conda install basemap

中间会让你确认是否安装,输入y,按下Enter键,即可安装。

方法二参考网站:https://blog.csdn.net/wyhjia/article/details/82386948

2. 打开spyder验证安装是否成功

在navigator中启动spyder,或者在prompt中输入spyder 启动spyder,
输入:
from mpl_toolkits.basemap import Basemap
运行,如果没有报错说明安装成功了。

3. 设置环境变量 【问题解决】

然而!!!
最坑的是,一旦不在navigator或者prompt中启动spyder,而是直接(在桌面快捷方式,或者左下角搜索spyder)点开spyder的时候,你会发现运行from mpl_toolkits.basemap import Basemap会报错!!!

报错信息如下:
解决Anaconda下安装basemap的问题_第2张图片

错误原因:
直接原因是:系统找不到这个叫做PROJ_LIB的环境变量,所以报错了。
根本原因:调用basemap模块的时候会调用basemap所依赖的proj4模块,所以当时在anaconda上安装basemap模块的时候细心的铁汁可以看到相应的也安装了proj4这个模块。但是最坑的是,anaconda root下安装proj4的时候不会主动给你设置proj4模块的环境变量,所以就导致的现在这样的错误。

解决方案(推荐方案2,因为这是我亲测成功过的方法):
方案1) :可以在anaconda下建立一个新环境(env),参考文章:https://blog.csdn.net/weixin_39278265/article/details/82982937
再进行之前的步骤1(安装)和2(验证),就可以了。

方案2):先将Anaconda安装目录下找到proj4的安装路径,我的是在:D:\software\Anaconda\pkgs\proj4-4.9.3-hfa6e2cd_8,然后打开这个文件夹,进入Library -> share 文件夹,将里面的文件全选并复制,粘贴到 D:\software\Anaconda\share\proj 这个文件夹下(如果Anaconda根目录下没有这个proj文件夹,就创建一个)。

解决Anaconda下安装basemap的问题_第3张图片

复制文件

解决Anaconda下安装basemap的问题_第4张图片

粘贴文件到指定位置

然后,设置环境变量,即在用户变量下新建一个就ok:

解决Anaconda下安装basemap的问题_第5张图片

可以重启电脑,使环境变量生效。
这样的话再次打开spyder 就不会出现这样的错误了。

中间“碰壁”过程记录

1)一开始疯狂报KeyError 'PROJ_LIB'的错,我找了好几个网站:[1-4]

可惜,这些都没有解决方案。

2)后来又看了几个关于如何在anaconda下安装basemap的网站[5-6]

3)我大概知道是proj4 的问题,我以为是proj4的版本问题,所以我在anaconda navigator下对proj4进行了版本回退,结果可能是网速或者电脑的原因,中间回退过程卡住了。

我一时手痒,强制退出了anaconda navigator,结果等我再次进入的时候,已经人是而物非,我的proj4不知道回没回退了(忘了),但是!,我的anaconda root版本竟然从3.7版本回退到了3.6!

震惊。没想到一个模块的版本回退会造成这样的后果。

4)放弃了root环境下basemap的安装,决定在之前新建的anaconda python 3.6 版本的环境中安装basemap试试,然而,我顺利安装了basemap,但是却无法打开spyder。

搜索后发现原因应该是basemap需要Qt依赖,所以新的Qt模块的安装与spyder产生冲突,导致spyder无法打开。

5)最后权衡之下,决定重装,参考的网站:
在win10上安装Anaconda并运行python程序
https://blog.csdn.net/weixin_39278265/article/details/82940274

Spyder启动太慢
https://blog.csdn.net/weixin_39278265/article/details/83795998

总结

最后在spyder上运行basemap模块的效果:

代码:

from mpl_toolkits.basemap import Basemap

import matplotlib.pyplot as plt

plt.figure(figsize=(16,8))
m = Basemap()
m.drawcoastlines()
plt.show()

解决Anaconda下安装basemap的问题_第6张图片

输出的世界地图

参考文献

[1] KeyError ‘PROJ_LIB’
https://github.com/matplotlib/basemap/issues/419

[2] KeyError ‘PROJ_LIB’
https://github.com/conda-forge/basemap-feedstock/issues/30

[3] Basemap import error in PyCharm —— KeyError: ‘PROJ_LIB’
https://stackoverflow.com/questions/52295117/basemap-import-error-in-pycharm-keyerror-proj-lib

[4] raise KeyError(key) from None
https://stackoverflow.com/questions/45472421/raise-keyerrorkey-from-none

[5] anaconda安装basemap
https://blog.csdn.net/wyhjia/article/details/82386948

[6] Anaconda中 安装basemap包
https://blog.csdn.net/u011596455/article/details/79620676

你可能感兴趣的:(研二上,每天一道编程题)