python安裝whl包并解決依賴關(guān)系的實(shí)現(xiàn)
一、什么是whl文件?
whl是一種預(yù)編譯的二進(jìn)制包文件,它主要用于安裝python庫。簡(jiǎn)單來講whl就是一種已經(jīng)編譯好的python庫文件。我們可以使用whl包來安裝python庫。
二、我們?yōu)槭裁葱枰褂脀hl文件來安裝python庫?
有的小伙伴可能會(huì)疑惑,我們安裝python庫時(shí)使用“pip install [庫名]”來安裝一個(gè)python庫,這樣可以直接借助網(wǎng)絡(luò)將這個(gè)庫的包拉下來并且將這個(gè)庫的依賴項(xiàng)也一并拉取下來。拉取下來以后pip還會(huì)幫我們解決這些庫的依賴問題,這樣的方法明明很方便,為什么我們還需要使用whl包來安裝python庫?其實(shí),使用whl一般用于一些很特殊的情況,比如在公司的內(nèi)部服務(wù)器中,這些服務(wù)器是不允許連接網(wǎng)絡(luò)的;亦或是我們使用pip命令安裝庫時(shí),即使換源了,但是下載依舊很慢。遇到這些情況時(shí),我們大概率都是把要安裝的包下載下來再安裝。
三、我們應(yīng)該去哪兒下載whl包?
我們可以去到python官方的第三方軟件庫“pypi”,它是一個(gè)中央存儲(chǔ)庫,開發(fā)者可以在這里上傳他們的軟件包,而其他開發(fā)者可以下載并使用這些軟件包。所以,我們接下來會(huì)演示如何在pypi中下載一個(gè)庫并且解決它的依賴關(guān)系最后安裝它。
四、下載whl包
我們可以直接在瀏覽器中搜索“pypi”。
如圖所示,我們搜索出來的第一個(gè)就是“pypi”的官方網(wǎng)站了。如果你像我這樣搜索沒有搜索到“pypi”的官方網(wǎng)站,也可以輸入下面的網(wǎng)址打開。
pypi官方網(wǎng)址:PyPI · The Python Package Index
打開官網(wǎng)以后我們可以看到中間有一個(gè)很大的搜索框。
我們直接在搜索框中搜索我們想要的python包即可。這里我使用“pygame”包舉例。我們?cè)谒阉骺蛑休斎?ldquo;pygame”并且回車。
回車以后應(yīng)該就能看到下面這個(gè)界面了。
我們可以看到這里有非常多的python包,我們點(diǎn)擊第一個(gè)即可。
點(diǎn)擊以后,來到如下界面,我們后面來看看這個(gè)界面。
我們可以看到這個(gè)頁面的左邊有三個(gè)大的選項(xiàng),下面我們來講講這些選項(xiàng)的作用。
首先第一個(gè)選項(xiàng)是項(xiàng)目描述,這里會(huì)對(duì)整個(gè)包有一個(gè)大致的描述包括依賴python的版本或者安裝方式,不同的python包他們的描述也不一樣。
第二個(gè)選項(xiàng)是這個(gè)包的歷史版本,我們可以點(diǎn)擊進(jìn)去下載這個(gè)包的歷史版本。
第三個(gè)選項(xiàng)是文件下載,這里包含這個(gè)包在不同架構(gòu),不同操作系統(tǒng),不同python的各個(gè)版本。我們會(huì)重點(diǎn)查看這個(gè)選項(xiàng),教大家怎么去分辨一個(gè)包是不是適合你的,如果一個(gè)包與你的操作系統(tǒng)或者是架構(gòu),亦或是python不兼容,那么就會(huì)出現(xiàn)安裝失敗的情況。
我們下面拿一個(gè)包來舉例。
pygame-2.6.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
首先是pygame:這個(gè)是我們要安裝的這個(gè)包的名稱。
2.6.0:這是我們要安裝這個(gè)包的版本號(hào)。
pp39:通常表示這個(gè)whl包是pypy(一個(gè)Python解釋器的替代實(shí)現(xiàn))的python3.9版本構(gòu)建的。你除了可能可以看到pp39以外,你還有可能看到cp39,這就表示這個(gè)包是Cpython(python的官方實(shí)現(xiàn))的python3.9版本構(gòu)建的。大部分的python包都會(huì)給出pp和cp兩種,這兩種類型的包除了在運(yùn)行速度上有區(qū)別。在使用方式上,這兩種形式的包都是一樣的。
pypy39:這里作為一個(gè)再次強(qiáng)調(diào)它使用了pypy的python3.9來構(gòu)建的包。這里值得注意的是,這個(gè)包用哪一個(gè)python構(gòu)建就要用哪個(gè)python來運(yùn)行。比如這里我們就需要python3.9
manylinux_2_17_x86_64:這表明這個(gè)whl包是針對(duì)“manylinux 2.17”兼容性的,它是GNU/Linux操作系統(tǒng)的標(biāo)準(zhǔn)化的二進(jìn)制兼容性目標(biāo),旨在與多種Linux發(fā)行版兼容。x86_64
表示這個(gè)包是為64位x86架構(gòu)編譯的。當(dāng)然,如果你是新手,那么你只需要知道這個(gè)包是在linux系統(tǒng)使用的就行了。
這就是這個(gè)包名的大概信息了,我們可以來整理一下,這個(gè)包的名字叫pygame,它的版本為2.6.0,基于pypy39構(gòu)建的linux x86_64版本。
下面我們?cè)賮砜匆粋€(gè)包名。
pygame-2.6.0-cp312-cp312-win32.whl
簡(jiǎn)單的分析就可以得出,這個(gè)包的名字是pygame,它的版本是2.6.0,基于Cpython3.12構(gòu)建的windows32位版本。
我們現(xiàn)在已經(jīng)了解到了這些包名的含義,那么我們就要根據(jù)我們對(duì)應(yīng)的操作系統(tǒng),架構(gòu)和python版本來下載對(duì)應(yīng)的包,我們可以使用下面的命令來查看python的版本。
python --version
輸入命令回車以后就會(huì)輸出python的版本了。我這里的python是3.8,那么我肯定是要使用pp38或者cp38類型的包。
我們可以使用下面這條命令來查看自己的系統(tǒng)架構(gòu):
$env:PROCESSOR_ARCHITECTURE
這里可以看到我的系統(tǒng)架構(gòu)是AMD64,也就是64位系統(tǒng)。我們肯定要選擇x86_64版本的包。
經(jīng)過篩選,我們可以看到,這個(gè)包是完美適合我計(jì)算機(jī)環(huán)境的。
我們點(diǎn)擊這個(gè)包的包名瀏覽器應(yīng)該就會(huì)開始下載了。
我們將這個(gè)包放到一個(gè)我們能找到的地方。
五、whl包的安裝
我們?cè)趐owershell中將路徑切換到這個(gè)放有whl包的文件夾,我們切換到這個(gè)文件夾以后可以使用“ls”命令查看這個(gè)目錄下的文件,如果你使用“ls”沒有看到這個(gè)文件,哪怕出現(xiàn)了再多的文件都意味著你的路徑錯(cuò)誤了。請(qǐng)將下載的文件放到一個(gè)你能找到的位置再使用powershell把路徑切換過去,或者使用絕對(duì)路徑。
現(xiàn)在有了這個(gè)文件我們就可以開始安裝了。
我們可以先使用下面這個(gè)查看安裝的包的指令來查看我們已經(jīng)安裝的包。
pip list
我們可以使用下面的命令來安裝一個(gè)whl包:
pip install [包名]
如果你被提示pip命令找不到,你需要先安裝pip命令。但是現(xiàn)在應(yīng)該都不會(huì)出現(xiàn)這種情況,在python較新的版本中,python被安裝時(shí)就附帶了pip。
我這里的包名是“pygame-2.6.0-cp38-cp38-win_amd64.whl”所以我會(huì)使用“pip install pygame-2.6.0-cp38-cp38-win_amd64.whl”來安裝這個(gè)包。值得注意的是,這里因?yàn)槲业陌驮谶@個(gè)目錄下我才直接輸入了包名,如果這個(gè)包不在這個(gè)目錄,我就應(yīng)該輸入別的路徑。
輸入命令以后回車,就可以得到以下輸出:
我們看到下面這樣的輸出就表示這個(gè)庫已經(jīng)安裝成功了。我們?cè)俅问褂?ldquo;pip list ”來查看我們已經(jīng)安裝的包。
我們可以發(fā)現(xiàn),剛剛安裝的包已經(jīng)出現(xiàn)在這里面了。
至此我們的whl包已經(jīng)安裝完成。當(dāng)然,不是所有的whl包都能直接安裝,它們其中的有些依賴了別的包,別的包又依賴了另外的包,依賴關(guān)系非常復(fù)雜,如果不先安裝好一個(gè)包依賴的包,那這個(gè)包就無法安裝,下面我們將來講一下怎么解決python包之間的依賴關(guān)系。
六、在解決依賴關(guān)系后來安裝whl包
我們現(xiàn)在先來看在線狀態(tài)pip包管理器是怎么解決依賴關(guān)系的。在在線狀態(tài)下,如果我們使用pip安裝包,不管這個(gè)包是被下載好的還是說這個(gè)包在網(wǎng)絡(luò)上,我們希望pip自動(dòng)來安裝。pip都是會(huì)去網(wǎng)絡(luò)上下載包。如果你把一個(gè)whl包下載到了本地,pip會(huì)在安裝它時(shí)查看它依賴的包,如果它依賴了沒有安裝的包,pip就會(huì)去網(wǎng)絡(luò)上下載對(duì)應(yīng)的whl文件并且安裝它,pip會(huì)一直重復(fù)這個(gè)過程,缺少什么就安裝什么,直到把你想要安裝的python包給安裝好。
首先強(qiáng)調(diào),我們這里講純離線的環(huán)境,就是完全沒有網(wǎng)絡(luò)的情況下,也就是說pip不能自動(dòng)去拉取包的情況下我們應(yīng)該怎么安裝whl包。我們來看一個(gè)錯(cuò)誤復(fù)現(xiàn),我使用“pip install PyQt5-5.15.11-cp38-abi3-win_amd64.whl”來安裝名為pyQt的包,但是我出現(xiàn)了下面的錯(cuò)誤。
我們可以看到前面的黃字和后面的白字大概都是在提示我們網(wǎng)絡(luò)有問題,還記得pip解決依賴關(guān)系的辦法嗎?是的,pip找不到依賴包時(shí),它會(huì)先去網(wǎng)絡(luò)上找。但是現(xiàn)在我已經(jīng)處于純離線環(huán)境了,根本不存在網(wǎng)絡(luò),所有pip根本就不能去下載包,也就報(bào)出了下面紅色的錯(cuò)誤。我們將其拷貝過來看。
ERROR: Could not find a version that satisfies the requirement PyQt5-sip<13,>=12.15 (from pyqt5) (from versions: none)
ERROR: No matching distribution found for PyQt5-sip<13,>=12.15
它的大概意思就是找不到PyQt5-sip這個(gè)庫的大于或者等于12.15的版本。
遇到這種情況我們應(yīng)該怎么辦呢?當(dāng)然是安裝它需要的庫啦。但是我們現(xiàn)在還是處于離線的環(huán)境,所以,我們還是要使用whl離線包來安裝pyQt所需要的庫。
但是現(xiàn)在還有一個(gè)問題就是,一個(gè)whl文件它可能不會(huì)只依賴一個(gè)包,我們應(yīng)該怎么去查看whl的所有依賴的包呢。其實(shí)也很簡(jiǎn)單。whl文件本質(zhì)上就是一個(gè)壓縮文件,我們只需要把后綴名改成zip再解壓就行了。如圖:
我們將其解壓,就可以看到下面的這幾個(gè)文件夾了。
然后我們?cè)龠M(jìn)入文件夾名字帶“info”的文件夾
進(jìn)入以后我們使用記事本打開文件夾中的“METADATA”文件。
我們可以看到這個(gè)文件中有幾行“Requires-Dist”,這些就是這個(gè)whl文件依賴的包了,我們現(xiàn)在看一下,現(xiàn)在這個(gè)名為pyQt的包依賴了“PyQt5-sip (>=12.15, <13)”,“PyQt5-Qt5 (>=5.15.2, <5.16.0)”這兩個(gè)包,我們現(xiàn)在去下載這兩個(gè)包。
我們下載了這兩個(gè)包以后,使用同樣的方法查看了它們所需的依賴。
我們可以看到它們并不依賴別的什么庫,所以我們可以直接開始安裝。
可以看到我們這兩個(gè)包已經(jīng)安裝成功了,最后我們來安裝pyQt。
至此,我們已經(jīng)解決了所有的依賴關(guān)系。當(dāng)然作為演示,我們使用的只是一個(gè)依賴關(guān)系較少的庫。在實(shí)際的運(yùn)用中某些庫的依賴關(guān)系要復(fù)雜得多。
七、結(jié)語
不管一個(gè)python庫依賴關(guān)系再復(fù)雜,它都擁有“METADATA”,讓我們有跡可循。人生為什么不是這樣?當(dāng)我們?cè)诖髮W(xué)迷茫的時(shí)候,為什么不嘗試去找找我們生活中的“METADATA”呢?
到此這篇關(guān)于python安裝whl包并解決依賴關(guān)系的實(shí)現(xiàn)的文章就介紹到這了,更多相關(guān)python安裝whl包內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
淺析Python 中的 WSGI 接口和 WSGI 服務(wù)的運(yùn)行
這篇文章主要介紹了Python 中的 WSGI 接口和 WSGI 服務(wù)的相關(guān)資料,幫助大家更好的理解和使用python,感興趣的朋友可以了解下2020-12-12Python 中如何使用 virtualenv 管理虛擬環(huán)境
這篇文章主要介紹了Python 中使用 virtualenv 管理虛擬環(huán)境的方法,幫助大家更好的理解和使用python,感興趣的朋友可以了解下2021-01-01Python3實(shí)現(xiàn)的爬蟲爬取數(shù)據(jù)并存入mysql數(shù)據(jù)庫操作示例
這篇文章主要介紹了Python3實(shí)現(xiàn)的爬蟲爬取數(shù)據(jù)并存入mysql數(shù)據(jù)庫操作,涉及Python正則爬取數(shù)據(jù)及針對(duì)mysql數(shù)據(jù)庫的存儲(chǔ)操作相關(guān)實(shí)現(xiàn)技巧,需要的朋友可以參考下2018-06-06python實(shí)現(xiàn)QQ郵箱群發(fā)郵件實(shí)例
大家好,本篇文章主要講的是python實(shí)現(xiàn)QQ郵箱群發(fā)郵件實(shí)例,感興趣的同學(xué)趕快來看一看吧,對(duì)你有幫助的話記得收藏一下2022-01-01python?keras構(gòu)建和訓(xùn)練模型簡(jiǎn)便性初探
這篇文章主要介紹了python?keras構(gòu)建和訓(xùn)練模型簡(jiǎn)便性初探,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2024-02-02