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