Mac

M1 Mac에 basemap 설치하기

이석사 중 2023. 9. 11. 11:29
728x90

오늘은 M1 Mac에 basemap을 설치해보겠습니다

 

원래는 tensorflow 설치 포스팅이 먼저와야 맞지만 이 에러가 해결이 되지 않다가 갑자기 해결되서 까먹기 전에 올리려구 합니다


0. 문제 발생

 

아마 완성되면 포스팅이 올라갈거지만 현재 다양한 라이브러리들과 tkinter를 이용해서

 

netcdf 시각화 툴을 만들어보는 중입니다

 

하지만 시각화하는 부분을 만드는 과정에서 에러가 발생하더군요

No module named 'mpl_toolkits.basemap'

그런데 저는 설치를 했는데도 이런 에러가 발생한겁니다

 

아나콘다 공식 홈페이지에 나와있는 코드를 입력해서 설치했습니다

conda install -c anaconda basemap

혹시 콘다로 설치한 basemap이 작동하지 않는건가 해서 pip install로 해봤는데 

 

다른 에러가 발생했습니다

    #warning "Using deprecated NumPy API, disable it with "\
     ^
    src/_geoslib.c:751:10 fatal error: 'geos_c.h' file not found
    #include "geos_c.h"
             ^
    1 warning 1 error generated
    error: command '/usr/bin/clang' failed with exit code 1
    [end of output]
    
  note: Thist error originates from a subprocess, and is likely not a problem with pip
  ERROR: Failed building wheel for basemap
Failed to build basemap
ERROR: Could not build wheels for basemap, which is required to install pyproject.toml-based projects

geos_c.h가 없기 때문에 basemap을 빌드할 수 없다는 에러였습니다

 

하지만 geos_c.h를 계속 찾을 수 없다고 하더군요

(base) lsh@isuhyeons-Macbook-Air % which geos_c.h
geos_c.h not found

인터넷을 찾아보니 geos_c.h라는 파일은 geos 라이브러리 폴더 내에 존재한다고 합니다

brew install geos
brew install proj

필요한 라이브러리들을 brew로 설치했기 때문에 geos 폴더를 찾아가서 확인해봤습니다

 

(base) lsh@isuhyeons-MacBook-Air include % ls
geos		geos.h		geos_c.h

너무나도 편안하게 들어있는 모습입니다

 

파일 위치도 찾았으니까 문제를 해결해봅시다


1. 해결 방법

해결법은 생각보다 간단합니다 

 

환경 변수 설정을 이용해서 geos_c.h를 연결해주면 됩니다

 

echo 'export GEOS_DIR=/opt/homebrew/Cellar/geos/3.12.0/' >> ~/.zshrc
source ~/.zshrc

이 부분은 homebrew 설치하는 글에서 보셔서 익숙하실 겁니다

 

파이썬을 리눅스 환경에서 사용할 경우 라이브러리 폴뎌를 기본적으로 /usr/local을 사용합니다

 

그렇기 때문에 geos 폴더도 /usr/geos/Cellar/geos로 찾아가서 geos_c.h를 찾게 되는거죠

 

하지먼 저희는 brew로 설치를 했기 때문에 /usr/local이 아닌 /opt/homebrew/Cellar에 geos가 있게 됩니다

 

그렇기 때문에 geos만 따로 선언해서 저 폴더에서 찾아오라고 환경변수를 선언해주면 됩니다

 

저 부분을 선언하고 다시 설치를 해보면

(base) lsh@isuhyeons-MacBook-Air coding % pip install basemap                                                
Collecting basemap
  Using cached basemap-1.3.8.zip (156 kB)
  Installing build dependencies ... done
  Getting requirements to build wheel ... done
  Preparing metadata (pyproject.toml) ... done
Collecting basemap-data<1.4,>=1.3.2 (from basemap)
  Using cached basemap_data-1.3.2-py2.py3-none-any.whl (30.5 MB)
Collecting pyshp<2.4,>=1.2 (from basemap)
  Using cached pyshp-2.3.1-py2.py3-none-any.whl (46 kB)
Requirement already satisfied: matplotlib<3.8,>=1.5 in /Users/lsh/miniconda3/lib/python3.11/site-packages (from basemap) (3.7.2)
Collecting pyproj<3.7.0,>=1.9.3 (from basemap)
  Using cached pyproj-3.6.0-cp311-cp311-macosx_11_0_arm64.whl (4.7 MB)
Requirement already satisfied: numpy<1.26,>=1.21 in /Users/lsh/miniconda3/lib/python3.11/site-packages (from basemap) (1.25.2)
Requirement already satisfied: contourpy>=1.0.1 in /Users/lsh/miniconda3/lib/python3.11/site-packages (from matplotlib<3.8,>=1.5->basemap) (1.1.0)
Requirement already satisfied: cycler>=0.10 in /Users/lsh/miniconda3/lib/python3.11/site-packages (from matplotlib<3.8,>=1.5->basemap) (0.11.0)
Requirement already satisfied: fonttools>=4.22.0 in /Users/lsh/miniconda3/lib/python3.11/site-packages (from matplotlib<3.8,>=1.5->basemap) (4.42.1)
Requirement already satisfied: kiwisolver>=1.0.1 in /Users/lsh/miniconda3/lib/python3.11/site-packages (from matplotlib<3.8,>=1.5->basemap) (1.4.5)
Requirement already satisfied: packaging>=20.0 in /Users/lsh/miniconda3/lib/python3.11/site-packages (from matplotlib<3.8,>=1.5->basemap) (23.0)
Requirement already satisfied: pillow>=6.2.0 in /Users/lsh/miniconda3/lib/python3.11/site-packages (from matplotlib<3.8,>=1.5->basemap) (10.0.0)
Requirement already satisfied: pyparsing<3.1,>=2.3.1 in /Users/lsh/miniconda3/lib/python3.11/site-packages (from matplotlib<3.8,>=1.5->basemap) (3.0.9)
Requirement already satisfied: python-dateutil>=2.7 in /Users/lsh/miniconda3/lib/python3.11/site-packages (from matplotlib<3.8,>=1.5->basemap) (2.8.2)
Requirement already satisfied: certifi in /Users/lsh/miniconda3/lib/python3.11/site-packages (from pyproj<3.7.0,>=1.9.3->basemap) (2023.5.7)
Requirement already satisfied: six>=1.5 in /Users/lsh/miniconda3/lib/python3.11/site-packages (from python-dateutil>=2.7->matplotlib<3.8,>=1.5->basemap) (1.16.0)
Building wheels for collected packages: basemap
  Building wheel for basemap (pyproject.toml) ... done
  Created wheel for basemap: filename=basemap-1.3.8-cp311-cp311-macosx_11_0_arm64.whl size=105270 sha256=5e350a82e7fca7002ba9365ff1df3f00fcf746dfab12994e80f419e6a1e9444d
  Stored in directory: /Users/lsh/Library/Caches/pip/wheels/35/01/d2/b50c4b97217609a9b8b25cc06fb9bb9e5885bd00456ae26b1a
Successfully built basemap
Installing collected packages: pyshp, pyproj, basemap-data, basemap
Successfully installed basemap-1.3.8 basemap-data-1.3.2 pyproj-3.6.0 pyshp-2.3.1

아주 잘 설치가 됩니다


이렇게 basemap 설치를 해봤습니다

 

아마 wrf-python 라이브러리를 설치하는 과정에서도 똑같은 에러 구문이 나타났었는데 

 

이 부분은 다시 시도해봐야겠습니다

728x90