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
這個文件中的第17
的from 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的使用;