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

时间:2018-10-21 00:40:58

标签: anaconda jupyter-notebook matplotlib-basemap

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

KeyError: 'PROJ_LIB'

在进行了一些在线研究之后,我了解我将在Anaconda的单独环境中安装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

然后在Jupyter Notebook中运行以下命令:

from mpl_toolkits.basemap import Basemap

谁能告诉我为什么会导致KeyError?

5 个答案:

答案 0 :(得分:9)

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

参考Basemap import error in PyCharm —— KeyError: 'PROJ_LIB'

答案 1 :(得分:2)

由于python的最新版本已更改了“ epsg”和PROJ_LIB的文件位置,因此出现了问题,但是他们不知何故忘记为底图更新 init .py。如果您使用anaconda安装了python,则这是espg文件的可能位置: C:\ Users(xxxx)\ AppData \ Local \ Continuum \ anaconda3 \ pkgs \ proj4-5.1.0-hfa6e2cd_1 \ Library \ share 因此,您必须在spyder或您使用的任何字段的代码开头添加此路径。

导入操作系统

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

从mpl_toolkits.basemap导入底图

答案 2 :(得分:1)

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

where /r "c:\Users\username" epsg.*

...

c:\ Users \ username \ 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

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

jupyter notebook

或将其添加到您的jupyter笔记本中(由john ed建议):

import os

os.environ['PROJ_LIB'] = r'c:\Users\username\AppData\Local\conda\conda\envs\envname\Library\share'

答案 3 :(得分:1)

如果您根本找不到epsg文件,则可以在此处下载:

https://raw.githubusercontent.com/matplotlib/basemap/master/lib/mpl_toolkits/basemap/data/epsg

将此文件复制到您的PATH,例如到:

os.environ ['PROJ_LIB'] ='C:\ Users \ username \ Anaconda3 \ pkgs \ basemap-1.2.0-py37h4e5d7af_0 \ Lib \ site-packages \ mpl_toolkits \ basemap \ data \'

这是在Windows 10 / Anaconda 3上对我有效的唯一解决方案。

答案 4 :(得分:-2)

从命令提示符处启动Jupyter Notebook,它不会引发相同的错误。它以某种方式对我有用!