原文网址:https://www.fsanmartin.co/mac-install-matplotlib-basemap-on-virtualenv/
安装环境mac os,python3.6.4,虚拟环境virtualenv
basemap安装前需要安装numpy, matplotlib, pyproj,用pip安装就行
先从basemap下载source文件,解压文件,先安装其中的geos。
tar zxvf basemap-1.1.0.tar.gz
cd basemap-1.1.0/geos-3.3.3/
安装geos
$export GEOS_DIR=/usr/local/Cellar/geos
$./configure --prefix=$GEOS_DIR
$make; make install
等待安装完成后,我们直接跳到安装basema
~/basemap-1.1.0 » python setup.py install
发现安装失败,失败信息如下:
- compile options: '-I/usr/local/include -I['/Users/myself/.virtualenvs/basemap-virtualenv/lib/python3.6/site-packages/numpy/core/include'] -I/Users/myself/.virtualenvs/basemap-virtualenv/lib/python3.6/site-packages/numpy/core/include -I/usr/local/Cellar/python3/3.6.2/Frameworks/Python.framework/Versions/3.6/include/python3.6m -c'
- clang: src/_geoslib.c
- zsh:1: no matches found: -I[/Users/myself/.virtualenvs/basemap-virtualenv/lib/python3.6/site-packages/numpy/core/include]
- zsh:1: no matches found: -I[/Users/myself/.virtualenvs/basemap-virtualenv/lib/python3.6/site-packages/numpy/core/include]
- error: Command "clang -Wno-unused-result -Wsign-compare -Wunreachable-code -fno-common -dynamic -DNDEBUG -g -fwrapv -O3 -Wall -Wstrict-prototypes -I/usr/local/include -I['/Users/myself/.virtualenvs/basemap-virtualenv/lib/python3.6/site-packages/numpy/core/include'] -I/Users/myself/.virtualenvs/basemap-virtualenv/lib/python3.6/site-packages/numpy/core/include -I/usr/local/Cellar/python3/3.6.2/Frameworks/Python.framework/Versions/3.6/include/python3.6m -c src/_geoslib.c -o build/temp.macosx-10.12-x86_64-3.6/src/_geoslib.o -MMD -MF build/temp.macosx-10.12-x86_64-3.6/src/_geoslib.o.d" failed with exit status 1
发现是这一句错误
clang -Wno-unused-result -Wsign-compare -Wunreachable-code -fno-common -dynamic -DNDEBUG -g -fwrapv -O3 -Wall -Wstrict-prototypes compile options: '-I/usr/local/include -I['/Users/myself/.virtualenvs/basemap-virtualenv/lib/python3.6/site-packages/numpy/core/include'] ...
原因是setup.py中的一个bug,如果你读了错误信息,你会发现我们再添加一个路径(-l),但是我们传递的是一个只含一个string的列表。在setup.py中找到下面的一句。
geos_include_dirs = [os.path.join(GEOS_dir,'include'),inc_dirs]
修改为
geos_include_dirs = [os.path.join(GEOS_dir,'include'),inc_dirs[0]]然后再执行python setup.py install就能正常安装。