Basemap--1--Linux下的安装

1. 相关准备

这一部分主要下载源码,以及安装依赖的其他库;

1.1 源码下载

下载版本basemap v1.1.0

https://github.com/matplotlib/basemap/archive/v1.1.0.tar.gz

解压:

tar -zxvf v1.1.0.tar.gz

1.2 Python虚拟环境

使用virtualenv创建独立的python环境;

virtual -p /usr/bin/python env
  • -p指定使用的python解释器;

使用Python环境:

source env/bin/activate
pip install --upgrade pip

1.3 安装依赖的库

查看依赖的库:

cd basemap-1.1.0/

安装pyproj、pyshp、Numpy、Matplotlib、Pillow

pip install -i https://pypi.tuna.tsinghua.edu.cn/simple pyproj==1.9.3
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple pyshp==1.2.0
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple numpy
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple matplotlib==3.2.2
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple pillow

查看:

pip list

1.4 编译GEOS

下载好的basemap文件夹中包含了geos-3.3.3的版本,完成编译安装即可;

# 命令行当前在test/basemap-1.1.0/文件夹下
# 进入geos-3.3.3
cd geos-3.3.3

# 执行
mkdir build && cd build
cmake -DCMAKE_INSTALL_PREFIX=/usr/local/geos ..
cmake ..

# 使用nproc查看核心数,我的是12, 修改j后面的数字
make -j12

# 上一步完成后,执行
sudo make install

# 完成后,即可在/usr/local/下发现geos文件夹
  • -DCMAKE_INSTALL_PREFIX也可以指定到其他路径,具有root权限的可以指定到/usr/local/geos;其他用户可以指定到自己的根目录下;

将geos添加到当前环境变量:

# 命令行定位到当前用户根目录
cd ~

# 打开~/.bashrc,也可以使用其他方式打开该文件
sudo vim ~/.bashrc

# 在最后添加以下内容
export GEOS_DIR=/usr/local/geos
export LD_LIBRARY_PATH=$GEOS_DIR/lib:$LD_LIBRARY_PATH
export PATH=$GEOS_DIR/bin:$PATH

# 保存后,执行
source ~/.bashrc

2. 安装Basemap

定位到basemap根目录下,执行:

python setup.py install

执行完毕;

注意:并没有完全成功;

3. 测试及问题解决

测试basemap:

# 继续执行
python -c "import mpl_toolkits.basemap as basemap; print(basemap.__version__)"

报错如下:

Traceback (most recent call last):
  File "<string>", line 1, in <module>
  File "/home/chenz/workspace/learning/basemap_learning/env/lib/python3.6/site-packages/mpl_toolkits/basemap/__init__.py", line 17, in <module>
    from matplotlib.cbook import is_scalar, dedent
ImportError: cannot import name 'is_scalar'

上面的错误信息表示/env/lib/python3.6/site-packages/mpl_toolkits/basemap/__init__.py这个文件中的第17from matplotlib.cbook import is_scalar, dedent出错;

需要利用is_scalar_or_string来替换掉is_scalar;

原因是安装matplotlib.cbook中已经不提供is_scalar;

修改方式:

# 进一步,定位到basemap包的路径下
cd env/lib/python3.6/site-packages/mpl_toolkits/basemap/

# 修改basemap/__init_.py文件
vim __init__.py
# 将第17行的is_scalar替换成is_scalar_or_string,即可
# 保存

继续测试basemap:

python -c "import mpl_toolkits.basemap as basemap; print(basemap.__version__)"
# 输出版本信息即表明成功
1.1.0

4. 结语

其实如果basemap这个库不弃用,安装起来还是比较容易的,但是弃用后,其他高版本的依赖库如matplotlib、pyproj,都不适用低版本的basemap了。

所以,最后还是算了吧,再写一篇文章整理一下之前用过的方法,有关basemap的东西也不再写;

重新开一篇新的学习一下Cartopy的使用;

原文地址:https://www.cnblogs.com/chenzhen0530/p/13885253.html