■ 廣東 張鵬 劉之良 秦超
編者按: 本文主要講述了在離線環(huán)境下的Linux終端上為Python語(yǔ)言安裝Basemap庫(kù)的過(guò)程,通過(guò)對(duì)遇到的問(wèn)題進(jìn)行分析和處理,希望對(duì)大家的使用有一些參考價(jià)值。
筆者在離線環(huán)境下Linux中為Python語(yǔ)言安裝Basemap庫(kù),開始安裝之前,通過(guò)網(wǎng)上了解一些基本情況。由于Basemap庫(kù)需要大量的依賴,如Matplotlib、Numpy、PROJ4、GEOS等??紤]到由于需要安裝Basemap的計(jì)算機(jī)終端位于離線環(huán)境,無(wú)法通過(guò)pip在線安裝,因此選擇Anaconda解決方案。
Anaconda是一個(gè)開源的Python發(fā)行版本,其包含了Conda、Python等180多個(gè)科學(xué)包及其依賴。可以極大的降低數(shù)據(jù)可視化環(huán)境安裝的復(fù)雜程度。但是,Anaconda中不包含Basemap庫(kù),需要另行安裝。
圖1 命令行窗口
由于需要離線安裝,第一步就是通過(guò)互聯(lián)下載相關(guān)軟件。下載包括Anaconda、Basemap、Pyproj等安裝文件。推薦到清華大學(xué)開源軟件鏡像站點(diǎn)下載,會(huì)比官網(wǎng)快很多,且有很多其他的包供選擇下載,上面提到的軟件基本都能找到。
第二步就是安裝Anaconda。運(yùn)行安裝文件Anaconda3-5.3.1-Linuxx86_64.sh,這里選擇的基于python3.7的發(fā)行版本,畢竟python3才是未來(lái)的趨勢(shì)。安裝完成后,需要在”/etc/profile”添加環(huán)境變量,將安裝路徑下anaconda3/bin目錄添加到系統(tǒng)環(huán)境變量中。運(yùn)行“python”,如圖1所示,說(shuō)明Anaconda安裝正確。
第三步,安裝Basemap庫(kù)依賴。在安裝Basemap庫(kù)之前需要安裝 Goes、Pyshp和P y p r o j三個(gè)依賴。如果沒(méi)有安裝這些依賴項(xiàng)目,在執(zhí)行“python setup install”時(shí),會(huì)提示因?yàn)槿鄙僖蕾嚩袛?。這三個(gè)依賴項(xiàng)目中,goes可以在Basemap中找到源碼,可以通過(guò)編譯安裝。Pyshp和Pyproj是 Python包,可以通過(guò)在解壓目錄中執(zhí)行“python setup.py install”來(lái)安裝。安裝完成后可以通過(guò)“pip list”命令查看相應(yīng)庫(kù)安裝情況。第四步,安裝Basemap庫(kù)。進(jìn)入Basemap解 壓 目 錄,執(zhí) 行“python setup.py install”,完成安裝。
接下來(lái)就是測(cè)試一下安裝是否正常,在Python交互接口中輸入“from mpl_toolkits.basemap import Basemap”,發(fā)現(xiàn)報(bào)錯(cuò)如圖2所示,提示沒(méi)有找到mpl_toolkits.basemap 模塊。
圖2 加載basemap報(bào)錯(cuò)提示
圖3 pip show basemap信息
安裝完成后測(cè)試加載Basemap庫(kù)提示找不到對(duì)應(yīng)模塊,難道是安裝失敗了?
通過(guò)在命令行中輸入“pip list | grep basemap”命令發(fā)現(xiàn),該模塊已經(jīng)被正常安裝。使用“pip info basemap”也可以查到相關(guān)信息,如圖3所示。
這里看到Basemap被安裝 到 了 Anaconda的“l(fā)ib/python3.7/sit-packages”目錄中。egg文件類似于java程序的jar包,實(shí)際就是一組文件集合的壓縮包。打開egg文件發(fā)現(xiàn)里面存在mpl_toolkits/basemap的目錄結(jié)構(gòu)。根據(jù)以上信息基本可以確認(rèn)basemap安裝正常,那么是什么原因?qū)е录虞dbasemap包失敗呢?
這里又做了一個(gè)測(cè)試,在Python命令行中輸入“import mpl_toolkits”,發(fā)現(xiàn)能夠正常執(zhí)行。這說(shuō)明mpl_toolkits這個(gè)模塊是存在的,經(jīng)過(guò)仔細(xì)檢查sitepackages目錄發(fā)現(xiàn),在該目錄下竟然還存在一個(gè)mpl_toolkits的文件夾,里面有若干目錄。嘗試加載其中一個(gè)模塊“import mpl_toolkits.mplot3d”,發(fā)現(xiàn)該模塊可以正常加載。同時(shí)也發(fā)現(xiàn)該目錄中沒(méi)有Basemap模塊。難道是Python的查找順序?qū)е翨asemap的egg包沒(méi)有被檢索到導(dǎo)致加載Basemap庫(kù)失敗么?嘗試將egg包中mpl_toolkits中的Basemap目錄直接復(fù)制 到sit-packages/mpl_toolkits目錄中,再次測(cè)試發(fā)現(xiàn)Basemap庫(kù)可以正常加載了。使用官網(wǎng)樣例程序測(cè)試,可以正常繪圖。至此,整個(gè)安裝過(guò)程結(jié)束。
Python語(yǔ)言在聯(lián)網(wǎng)安裝時(shí)通過(guò)pip或是conda等在線安裝工具可以自動(dòng)安裝依賴和軟件,極大的降低了環(huán)境安裝的復(fù)雜程度。在離線安裝環(huán)境下,anaconda會(huì)打包很多庫(kù)和依賴項(xiàng)。本例就是由于anaconda預(yù)安裝了一些模塊,致使site-packages中存在mpl_toolkits文件夾。調(diào)用basemap模塊時(shí),由于mpl_toolkits文件夾會(huì)被優(yōu)先檢索,導(dǎo)致查找不到egg包中的basemap模塊,引起調(diào)用失敗。相對(duì)成熟的商業(yè)項(xiàng)目,開源項(xiàng)目更加靈活,但是使用者需要更加仔細(xì)的分析,對(duì)底層知識(shí)有更加詳細(xì)的了解才能更好的發(fā)揮開源項(xiàng)目的優(yōu)勢(shì)。