使用Anaconda Jupyter笔记本的底图库 - KeyError:PROJ_LIB

Rub*_*enB 12 matplotlib-basemap anaconda jupyter-notebook

我正在尝试安装并将Basemap库导入我的Jupyter Notebook,但这会返回以下错误:

KeyError: 'PROJ_LIB'
Run Code Online (Sandbox Code Playgroud)

经过一些网上研究,我了解到我要在Anaconda的独立环境中安装Basemap.在创建新环境并安装Basemap(以及所有其他相关库)之后,我已经激活了环境.但是在导入Basemap时,我仍然会收到相同的KeyError.

这是我在MacOS终端中所做的:

conda create --name Py3.6 python=3.6 basemap
source activate Py3.6
conda upgrade proj4
env | grep -i proj
conda update --channel conda-forge proj4
Run Code Online (Sandbox Code Playgroud)

然后在Jupyter Notebook中运行以下代码:

from mpl_toolkits.basemap import Basemap
Run Code Online (Sandbox Code Playgroud)

任何人都可以告诉我为什么会导致KeyError?

Ran*_*dyP 12

需要在启动笔记本之前或在python中设置PROJ_LIB环境变量 os.environ['PROJ_LIB'] = '<path_to_anaconda>/share/proj'

参考.PyCharm中的底图导入错误 - KeyError:'PROJ_LIB'


Pav*_*vlo 8

在Windows 10命令行中:首先找到epsg文件的存储目录:

where /r "c:\Users\username" epsg.*
Run Code Online (Sandbox Code Playgroud)

...

c:\ Users \用户名\ AppData \ Local \ conda \ conda \ envs \ envname \ Library \ share \ epsg

...

然后在命令行中:

activate envname

SET PROJ_LIB=c:\Users\username\AppData\Local\conda\conda\envs\envname\Library\share
Run Code Online (Sandbox Code Playgroud)

(确保路径中的尾部空格没有前导!),然后

jupyter notebook
Run Code Online (Sandbox Code Playgroud)

或将其添加到您的Jupyter笔记本中(由约翰·埃德(John ed)建议):

import os

os.environ['PROJ_LIB'] = r'c:\Users\username\AppData\Local\conda\conda\envs\envname\Library\share'
Run Code Online (Sandbox Code Playgroud)


小智 7

问题发生的原因是“epsg”和 PROJ_LIB 的文件位置已针对最新版本的 python 进行了更改,但不知何故他们忘记更新Basemap的init .py。如果您使用 anaconda 安装了 python,这是您的 espg 文件的可能位置:

C:\Users\(xxxx)\AppData\Local\Continuum\anaconda3\pkgs\proj4-5.1.0-hfa6e2cd_1\Library\share

因此,您必须在 spyder 或您正在使用的任何字段中的代码开头添加此路径。

import os

os.environ['PROJ_LIB'] = r'C:\Users\(xxxx)\AppData\Local\Continuum\anaconda3\pkgs\proj4-5.1.0-hfa6e2cd_1\Library\share'

from mpl_toolkits.basemap import Basemap
Run Code Online (Sandbox Code Playgroud)