如何避免在导入basemap时出现PROJ_LIB错误?

5

我尝试在Python中按以下方式导入basemap:

from mpl_toolkits.basemap import Basemap

我遇到了以下错误:

Traceback (most recent call last):

  File "<ipython-input-16-880204a64918>", line 2, in <module>
    from mpl_toolkits.basemap import Basemap

  File "C:\Users\bakhadher\AppData\Local\Continuum\anaconda3\lib\site-packages\mpl_toolkits\basemap\__init__.py", line 155, in <module>
    pyproj_datadir = os.environ['PROJ_LIB']

  File "C:\Users\bakhadher\AppData\Local\Continuum\anaconda3\lib\os.py", line 678, in __getitem__
    raise KeyError(key) from None

KeyError: 'PROJ_LIB'

2
有用的链接在这里:https://github.com/matplotlib/basemap/issues/419 - swatchai
这是在基础环境下安装conda时引起的。因此,您可以a)在环境中设置PROJ_LIB(〜/ .bashrc),或b)在从basemap导入之前在Python代码中修补PROJ_LIB,或c)在已激活的conda环境下重新安装basemap。 - smci
这是由于在基本环境下安装conda引起的”,你混淆了原因和结果。这是由于开发人员假设每个人都应该以某种方式使用conda并放弃其他方式所致。结果是安装失败。 - mins
3个回答

7

从这里开始:https://github.com/conda-forge/basemap-feedstock/issues/30#issuecomment-423512069

该链接提到的问题是在安装basemap库时遇到的问题。解决方法是更新环境中的proj库并重新安装basemap。如果你使用的是Anaconda,可以通过以下命令更新proj库:

conda update proj -c conda-forge

然后再次尝试安装basemap库,应该就能成功了。

import os
import conda

conda_file_dir = conda.__file__
conda_dir = conda_file_dir.split('lib')[0]
proj_lib = os.path.join(os.path.join(conda_dir, 'share'), 'proj')
os.environ["PROJ_LIB"] = proj_lib

from mpl_toolkits.basemap import Basemap```

我尝试了这种方法,但是它报错了:“FileNotFoundError: [Errno 2] No such file or directory: 'D:\Anaconda_Python\share\proj\epsg'”。实际上,在这个位置我没有“proj”文件夹,即使我已经安装了“proj”包。 - AAAA
这对我在Linux和OSX上的anaconda3都有效。不确定为什么,在OSX上,只有当cron调用调用python程序的bash脚本时才会出现问题;从命令行调用bash脚本可以避免同样的问题。 - Kevin
@AAAA:“*我尝试了这种方法,但出现了“FileNotFoundError”错误,然后搜索文件EPSG(没有扩展名)。它将位于类似于<path>/share/basemap/的目录/文件夹中,环境变量PROJ_LIB应设置为值<path>/share(即忽略最后一个目录/文件夹)。此答案中的代码仅设置变量,因此您可以手动执行此操作。” - mins

1
重新安装软件包(版本问题可能导致此问题)。
conda install -c conda-forge proj4
conda install basemap
  1. 设置环境变量:setenv PROJ_LIB "$CONDA_PREFIX/share/proj"
  2. 在Python脚本中(需要根据不同的环境进行定制)
import os
os.environ['PROJ_LIB'] = '/glade/u/home/lixujin/work/anaconda3/envs/AC_tools/share/proj'

我应该在Anaconda提示符或Spyder中写"$CONDA_PREFIX/share/proj"吗?两者都会出现错误。如果我转到"D:\Anaconda_Python\share",那里没有"proj"文件夹。 - AAAA

0

我有conda,通常我会遇到这个错误,我的解决方案是:

import os
os.environ['PROJ_LIB'] = '/home/YOUR_USER/anaconda3/share/proj'
from mpl_toolkits.basemap import Basemap
import cartopy.crs as crs

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接