歷盡艱辛,Windows系統下安裝Basemap,以及 PROJ_LIB 錯誤處理
Basemap是matplolib的一個元件,是地圖資料視覺化的重要工具。
本人安裝的是基於 Python3.6 版本的 Anaconda,嘗試了諸多種安裝basemap的方法,其中多次遭遇安裝失敗,也查找了網上許多tips,發現這個一個普遍的問題。因此決定將該方法分享出來,但不保證一定成功,供大家參考。
首先宣告下本人的PC環境:
環境一: win10
-
作業系統:Windows10
-
基於 Python3.6 版本的 Anaconda
在 windows10 下,安裝步驟如下:
(1) 首先,從下面的網站下載 basemap 和 pyproj 的whl檔案
https://www.lfd.uci.edu/~gohlke/pythonlibs/
對應 python3.6 版,windows 系統下的檔案如下:
-
basemap-1.2.0-cp36-cp36m-win_amd64.whl
-
pyproj-1.9.5.1-cp36-cp36m-win_amd64.whl
(2) 安裝 pyproj 的 whl 檔案, 如下:
pip install 路徑+檔名

圖1
(3) 安裝basemap 的 whl 檔案,如下:

圖2
(4) 測試下 basemap 是否安裝成功
from mpl_toolkits.basemap import Basemap

圖3
如上圖所示,顯示 Matplotlib 缺少檔案, Basemap 不能正確執行。
(5) 更新 Matplotlib 庫
pip install matplotlib --upgrade

圖4
(6) 再次測試 Basemap 是否安裝成功

圖5
可以看到,現在 Basemap 是可以正確執行的。
接下來,在 Jupyter Notebook 中執行程式碼試試。
-
import matplotlib as mpl
-
import matplotlib.pyplot as plt
-
-
%matplotlib inline
-
plt.style.use('ggplot')
-
-
from mpl_toolkits.basemap import Basemap
-
-
plt.figure(figsize=(8,8))
-
-
m = Basemap(projection='ortho', resolution=None,
-
lat_0=50,lon_0=-100)
-
m.bluemarble(scale=0.5)
執行結果如下:

圖6
以上執行結果說明,Basemap 已經成功安裝。
環境二: win7
-
作業系統:Windows7
-
基於 Python3.6 版本的 Anaconda
本以為 Basemap 的安裝就告一段落了,但本人還有一個 windows 7 系統 的PC。
想著 win7 跟 win10 應該是一樣的安裝, 但按上述的步驟安裝後,出現以下錯誤:
執行程式碼:
from mpl_toolkits.basemap import Basemap
出現以下問題:
-
Traceback (most recent call last)
-
<ipython-input-1-d9467465a3b6> in <module>()
-
----> 1 from mpl_toolkits.basemap import Basemap
-
-
/opt/conda/lib/python3.6/site-packages/mpl_toolkits/basemap/__init__.py in <module>()
-
144
-
145 # create dictionary that maps epsg codes to Basemap kwargs.
-
--> 146 pyproj_datadir = os.environ['PROJ_LIB']
-
147 epsgf = open(os.path.join(pyproj_datadir,'epsg'))
-
148 epsg_dict={}
-
-
/opt/conda/lib/python3.6/os.py in __getitem__(self, key)
-
667 except KeyError:
-
668 # raise KeyError with the original key value
-
--> 669 raise KeyError(key) from None
-
670 return self.decodevalue(value)
-
671
-
-
KeyError: 'PROJ_LIB'
這個 “PROJ_LIB” 問題,我嘗試了很多遍,也查閱了很多網站提供的解決方案,發現大部分都不是太符合,最後在某個英文的解決方案裡有提到一種 較為間接的解決方案, 經過嘗試後,發現是可以安裝 Basemap, 併成功執行的。
在此,給大家分享下。
其中曲折的試錯過程就不描述了,直接介紹成功的過程(但不保證在你的電腦上是沒有問題的)。
這種方法的核心是 在 Anaconda 下建立一個虛擬環境,然後在 虛擬環境中安裝和執行 Basemap。
(1) 在 Anaconda 下建立一個虛擬環境
開啟 Anaconda Prompt, 在 Anaconda 的預設跟目錄下建立一個虛擬環境,名稱為 “py36”。
conda create -n py36 python=3.6
關於 Anaconda 下虛擬環境的安裝,請參考以下內容: http://liyangbit.com/anaconda/anaconda-install-env-to-custom-path/
安裝好後,可以用以下命令來檢視虛擬環境的列表:
conda info --envs
然後啟用虛擬環境
activate py36
(2) 在 虛擬環境 “py36” 下安裝 matplotlib
pip install matplotlib
(3) 在 虛擬環境 “py36” 下安裝 pyproj 的 whl 檔案, 如下:
pip install 路徑+檔名
(4) 在 虛擬環境 “py36” 下安裝basemap 的 whl 檔案,如下:
pip install 路徑+檔名
(5) 在 虛擬環境 “py36” 下測試下 basemap 是否安裝成功
from mpl_toolkits.basemap import Basemap

圖7
可以看到,在虛擬環境下,Basemap 是可以正確執行的。
(6) 測試下在 Jupyter Notebook 中 Basemap 是否可以執行
程式檔案目錄下輸入
jupyter notebook
發現在預設情況下沒有找到之前建立的 虛擬環境。
在 Jupyter Notebook 中, 建立的虛擬環境需要安裝一個外掛才能正確的顯示出來。
開啟 Anaconda Prompt,外掛的安裝命令如下:
conda install nb_conda
再重新開啟Jupyter Notebook,就可以找到安裝好的虛擬環境,如下:

圖8
在虛擬環境下執行下面的程式碼:
-
import matplotlib as mpl
-
import matplotlib.pyplot as plt
-
-
%matplotlib inline
-
plt.style.use('ggplot')
-
-
from mpl_toolkits.basemap import Basemap
-
-
plt.figure(figsize=(8,8))
-
-
m = Basemap(projection='ortho', resolution=None,
-
lat_0=50,lon_0=-100)
-
m.bluemarble(scale=0.5)
執行結果如下:

圖6
以上執行結果說明,Basemap 已經成功安裝。
至此,在 win10 和 win7 下都可以安裝和執行 Basemap。
如果你對 Basemap 感興趣,也可以進行安裝和使用。
如有問題,不妨一起交流下。
原文釋出時間為: 2018-12-04
本文作者:Lemonbit
本文來自雲棲社群合作伙伴“ ofollow,noindex" target="_blank">Python資料之道 ”,瞭解相關資訊可以關注“ Python資料之道 ”。