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

Yup*_*pei 17 python pycharm python-3.x matplotlib-basemap

我尝试使用Basemap包来绘制PyCharm的地图,但是我遇到了问题

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

跟踪追溯如下:

Traceback (most recent call last):
File "/Users/yupeipei/anaconda3/lib/python3.6/site-packages/IPython/core/interactiveshell.py", line 2963, in run_code
    exec(code_obj, self.user_global_ns, self.user_ns)
  File "<ipython-input-4-0a24a3a77efd>", line 7, in <module>
    from mpl_toolkits.basemap import Basemap
  File "/Applications/PyCharm.app/Contents/helpers/pydev/_pydev_bundle/pydev_import_hook.py", line 20, in do_import
    module = self._system_import(name, *args, **kwargs)
  File "/Users/yupeipei/anaconda3/lib/python3.6/site-packages/mpl_toolkits/basemap/__init__.py", line 146, in <module>
    pyproj_datadir = os.environ['PROJ_LIB']
  File "/Users/yupeipei/anaconda3/lib/python3.6/os.py", line 669, in __ getitem__
    raise KeyError(key) from None
KeyError: 'PROJ_LIB'
Run Code Online (Sandbox Code Playgroud)

我对PyCharm上的这个错误感到困惑,因为相同的脚本在Jupyter或Spyder上运行正常!PyCharm的环境是../anaconda3/lib/python3.6,其中与anaconda相同.

有没有人遇到过这个错误?

任何人都可以帮我解决这个错误吗?

小智 15

关于mewahl的评论我已经添加到我的.bashrc(我使用bash):

导出PROJ_LIB =/path/to/your/instalation/of/anaconda/share/proj /

现在底图(和其他工作).

  • 这是解决此问题的好方法[/sf/ask/3703786271/?noredirect=1&lq=1] (3认同)

use*_*531 12

对于带有Anaconda + Python 3.71的Windows 10(我确定其他Python 3版本和Windows 7/8),您可以告诉Basemap Proj4的"epsg"文件要成功.我没有"环境"或其他任何东西,因为它需要做太多工作 - 所以我没有anaconda\share\proj区域(据我所知,为什么我没有它).

但是,Basemap想要的是文件"epsg",使用Windows资源管理器搜索Anaconda目录.如果找不到,请打开"Anaconda Prompt"并输入以下命令安装Proj4:

conda install -c conda-forge proj4
Run Code Online (Sandbox Code Playgroud)

如果找到它,它应该是这样的:

C:\ Utilities\Python\Anaconda\Library\Share(它是我的地方,以及\ pkgs\places我想它放置包本身 - 如果需要那些也可以工作,我最初使用它们,但是图书馆应该更好地完成更新(也许)).

在导入Basemap之前使用以下代码,它将起作用.将环境变量PROJ_LIB设置为epsg所在的位置,然后Basemap可以满意.

import os
os.environ["PROJ_LIB"] = "C:\\Utilities\\Python\\Anaconda\\Library\\share"; #fixr
from mpl_toolkits.basemap import Basemap
Run Code Online (Sandbox Code Playgroud)

作为一个很好的奖励,要获得Basemap的高分辨率数据,Anaconda不会在Basemap安装中包含,请输入"Anaconda Prompt":

conda install -c conda-forge basemap-data-hires
Run Code Online (Sandbox Code Playgroud)


Yus*_*tir 12

答案来自 Github,它对我有用。

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
Run Code Online (Sandbox Code Playgroud)


Mar*_*erc 11

这对我有用:

import os
os.environ["PROJ_LIB"] = os.path.join(os.environ["CONDA_PREFIX"], "share", "proj")
Run Code Online (Sandbox Code Playgroud)

这通过省略对 epsg 文件的路径进行硬编码来扩展 @Yusuf Baktir 的答案。这样代码就可以在任何安装了 conda 的机器上运行(当然也激活了)。


sam*_*bia 5

您必须将Proj lib的路径设置为较新的版本,此路径已被替换。导入matplot_toolkits之前,请编写以下两行代码

  ### For Window's Users
      import os
      os.environ['PROJ_LIB'] = r'C:\Users\XXXXX\Anaconda3\pkgs\proj4-5.2.0- 
      ha925a31_1\Library\share'
Run Code Online (Sandbox Code Playgroud)

要查找Proj_lib的路径,只需搜索epsg,然后复制此epsg文件位置并放入proj_lib中。您的问题将得到解决。

  ### For Linux's Users
  import os
  os.environ['PROJ_LIB'] = r'/home/XXXXXX/anaconda3/pkgs/proj4-5.2.0- 
  he6710b0_1/share/proj'
Run Code Online (Sandbox Code Playgroud)