Ошибка импорта базовой карты в PyCharm —— KeyError: 'PROJ_LIB'
Я пытался использовать пакет Basemap для построения карты с помощью PyCharm, но у меня что-то не так с
from mpl_toolkits.basemap import Basemap`
А трассировка такова:
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'
Я запутался с этой ошибкой на PyCharm, потому что тот же скрипт работает правильно на Jupyter или Spyder! Среда в PyCharm - это../anaconda3/lib/python3.6, где то же самое от anaconda.
Кто-нибудь встречал эту ошибку раньше? Может ли кто-нибудь помочь мне решить эту ошибку?
10 ответов
Для Windows 10 с Anaconda + Python 3.71 (и я уверен, что другие версии Python 3 и Windows 7/8), вы можете указать Basemap, где файл "epsg" Proj4 будет успешным. У меня нет "среды" или чего-то еще, потому что это слишком большая работа, чтобы понять - поэтому у меня не было области anaconda\share\proj (насколько я мог понять, почему у меня ее не было).
Но, что хочет Basemap, так это файл "epsg", найдите его в каталоге Anaconda с помощью проводника Windows. Если он не находит его, установите Proj4, открыв "Anaconda Prompt" и введя:
conda install -c conda-forge proj4
Если он найдет его, он должен выглядеть примерно так:
C: \ Utilities \ Python \ Anaconda \ Library \ Share (там, где я находился, а также в \pkgs\ местах, где, как мне кажется, он помещает сам пакет - и они тоже могут работать, если это необходимо, я использовал их сначала, но библиотека должна работать через обновления лучше (возможно)).
Используйте следующий код перед импортом Basemap, и он будет работать. Устанавливает переменную среды PROJ_LIB, где бы ни находился epsg, и тогда Basemap может быть счастливым.
import os
os.environ["PROJ_LIB"] = "C:\\Utilities\\Python\\Anaconda\\Library\\share"; #fixr
from mpl_toolkits.basemap import Basemap
В качестве приятного бонуса, чтобы получить в высоком разрешении данные базовой карты, которые Anaconda не включает в программу установки базовой карты, введите "Anaconda Prompt":
conda install -c conda-forge basemap-data-hires
После комментария mewahl я добавил в свой.bashrc (я использую bash):
экспорт PROJ_LIB=/ путь / к / ваш / установка / из /anaconda/поделиться /proj/
и теперь базовая карта (и другие работают).
Вы должны указать путь к 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'
Чтобы найти путь к 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'
Ответ от Github, и он работал для меня. https://github.com/conda-forge/basemap-feedstock/issues/30
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
Это сработало для меня:
import os
os.environ["PROJ_LIB"] = os.path.join(os.environ["CONDA_PREFIX"], "share", "proj")
Это расширяет ответ @Yusuf Baktir, опуская жесткое кодирование пути к файлу epsg. Таким образом, код работает на любой машине, на которой установлен conda (и, конечно, активирован).
Кажется, это общая проблема. Есть несколько сообщений об ошибках об этом
- базовая карта / проблемы / 419,
- https://github.com/conda-forge/basemap-feedstock/issues/30
- BaseMap / вопросы / 428
Я сам столкнулся с этой ошибкой, и для меня решение было удалить базовую карту 1.2, затем установить базовую карту 1.1 из старого файла колеса, который у меня все еще лежал, и затем снова установить базовую карту 1.2. Честно говоря, я понятия не имею, почему это сработало.
Также из вышеперечисленных вопросов есть множество других решений, о которых люди сообщали, что работают на них. Надеюсь, один из них подходит и здесь.
Я считаю, что эта ошибка возникает при использовании смешанных версий пакетов basemap, basemap-data и basemap-data-hires. Для меня следование инструкциям по найму базовых карт-данных не найдено, несмотря на то, что они были установлены, и это решило проблему.
Простое решение Proj4, которое можно исправить на pycharm - это перейти к настройке-> интерпретатор проекта -> + -> написать proj4 в поле поиска и установить.
Мне не удалось решить эту проблему, но я смог найти альтернативу, используя CartoPy. базовая карта поддерживается для пользователей Python 2.7. CartoPy - лучшая альтернатива
Я столкнулся с той же проблемой. Я установил anaconda и установил conda установить -c anaconda basemap.
Я использовал Anaconda, встроенную в IDE под названием "Spyder". Spyder лучше, чем pycharm. Единственная проблема со спайдером - отсутствие интеллигентности.
Я решил проблему Proj4, установив путь.
Другая проблема - перезапуск ядра при загрузке набора файлов большего размера.json.
Я использую Notepad++ и редактор 010 для повторного сохранения файла небольшими порциями и, наконец, я объединил все выводы.