■ 廣東 張鵬 劉之良 秦超
編者按: 本文主要講述了在離線環(huán)境下的Linux終端上為Python語言安裝Basemap庫的過程,通過對遇到的問題進行分析和處理,希望對大家的使用有一些參考價值。
筆者在離線環(huán)境下Linux中為Python語言安裝Basemap庫,開始安裝之前,通過網(wǎng)上了解一些基本情況。由于Basemap庫需要大量的依賴,如Matplotlib、Numpy、PROJ4、GEOS等。考慮到由于需要安裝Basemap的計算機終端位于離線環(huán)境,無法通過pip在線安裝,因此選擇Anaconda解決方案。
Anaconda是一個開源的Python發(fā)行版本,其包含了Conda、Python等180多個科學包及其依賴。可以極大的降低數(shù)據(jù)可視化環(huán)境安裝的復雜程度。但是,Anaconda中不包含Basemap庫,需要另行安裝。

圖1 命令行窗口
由于需要離線安裝,第一步就是通過互聯(lián)下載相關軟件。下載包括Anaconda、Basemap、Pyproj等安裝文件。推薦到清華大學開源軟件鏡像站點下載,會比官網(wǎng)快很多,且有很多其他的包供選擇下載,上面提到的軟件基本都能找到。
第二步就是安裝Anaconda。運行安裝文件Anaconda3-5.3.1-Linuxx86_64.sh,這里選擇的基于python3.7的發(fā)行版本,畢竟python3才是未來的趨勢。安裝完成后,需要在”/etc/profile”添加環(huán)境變量,將安裝路徑下anaconda3/bin目錄添加到系統(tǒng)環(huán)境變量中。運行“python”,如圖1所示,說明Anaconda安裝正確。
第三步,安裝Basemap庫依賴。在安裝Basemap庫之前需要安裝 Goes、Pyshp和P y p r o j三個依賴。如果沒有安裝這些依賴項目,在執(zhí)行“python setup install”時,會提示因為缺少依賴而中斷。這三個依賴項目中,goes可以在Basemap中找到源碼,可以通過編譯安裝。Pyshp和Pyproj是 Python包,可以通過在解壓目錄中執(zhí)行“python setup.py install”來安裝。安裝完成后可以通過“pip list”命令查看相應庫安裝情況。第四步,安裝Basemap庫。進入Basemap解 壓 目 錄,執(zhí) 行“python setup.py install”,完成安裝。
接下來就是測試一下安裝是否正常,在Python交互接口中輸入“from mpl_toolkits.basemap import Basemap”,發(fā)現(xiàn)報錯如圖2所示,提示沒有找到mpl_toolkits.basemap 模塊。

圖2 加載basemap報錯提示

圖3 pip show basemap信息
安裝完成后測試加載Basemap庫提示找不到對應模塊,難道是安裝失敗了?
通過在命令行中輸入“pip list | grep basemap”命令發(fā)現(xiàn),該模塊已經(jīng)被正常安裝。使用“pip info basemap”也可以查到相關信息,如圖3所示。
這里看到Basemap被安裝 到 了 Anaconda的“l(fā)ib/python3.7/sit-packages”目錄中。egg文件類似于java程序的jar包,實際就是一組文件集合的壓縮包。打開egg文件發(fā)現(xiàn)里面存在mpl_toolkits/basemap的目錄結(jié)構(gòu)。根據(jù)以上信息基本可以確認basemap安裝正常,那么是什么原因?qū)е录虞dbasemap包失敗呢?
這里又做了一個測試,在Python命令行中輸入“import mpl_toolkits”,發(fā)現(xiàn)能夠正常執(zhí)行。這說明mpl_toolkits這個模塊是存在的,經(jīng)過仔細檢查sitepackages目錄發(fā)現(xiàn),在該目錄下竟然還存在一個mpl_toolkits的文件夾,里面有若干目錄。嘗試加載其中一個模塊“import mpl_toolkits.mplot3d”,發(fā)現(xiàn)該模塊可以正常加載。同時也發(fā)現(xiàn)該目錄中沒有Basemap模塊。難道是Python的查找順序?qū)е翨asemap的egg包沒有被檢索到導致加載Basemap庫失敗么?嘗試將egg包中mpl_toolkits中的Basemap目錄直接復制 到sit-packages/mpl_toolkits目錄中,再次測試發(fā)現(xiàn)Basemap庫可以正常加載了。使用官網(wǎng)樣例程序測試,可以正常繪圖。至此,整個安裝過程結(jié)束。
Python語言在聯(lián)網(wǎng)安裝時通過pip或是conda等在線安裝工具可以自動安裝依賴和軟件,極大的降低了環(huán)境安裝的復雜程度。在離線安裝環(huán)境下,anaconda會打包很多庫和依賴項。本例就是由于anaconda預安裝了一些模塊,致使site-packages中存在mpl_toolkits文件夾。調(diào)用basemap模塊時,由于mpl_toolkits文件夾會被優(yōu)先檢索,導致查找不到egg包中的basemap模塊,引起調(diào)用失敗。相對成熟的商業(yè)項目,開源項目更加靈活,但是使用者需要更加仔細的分析,對底層知識有更加詳細的了解才能更好的發(fā)揮開源項目的優(yōu)勢。