您好,登錄后才能下訂單哦!
這篇文章主要講解了“Python Wheels有什么作用”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“Python Wheels有什么作用”吧!
Python .whl
文件(或wheels)是python
很少被提到的一部分,不過它們對python包
的安裝過程相當重要。如果你已經使用pip
安裝了python包
,那么很大可能輪子(wheels)使你的安裝速度更快了,效率更高了。
輪子是Python
生態系統的一個組件,它有助于使包的安裝工作正常進行。它們允許更快的安裝和更穩定的包分發過程。在本教程中,您將深入了解輪子是什么,它們提供了什么好處,以及它們是如何獲得吸引力并使使用Python
變得更方便的。
在學習如何將項目打包到輪子中之前,從用戶的角度了解使用輪子是什么樣子是很有幫助的。
可以像往常一樣在環境中安裝一個Python包
來開始這個實驗。在這種情況下,安裝uWSGI 2.0.x
版本:
$ python -m pip install 'uwsgi==2.0.*' 2 Collecting uwsgi==2.0.* 3 Downloading uwsgi-2.0.18.tar.gz (801 kB) 4 |████████████████████████████████| 801 kB 1.1 MB/s 5 Building wheels for collected packages: uwsgi 6 Building wheel for uwsgi (setup.py) ... done 7 Created wheel for uwsgi ... uWSGI-2.0.18-cp38-cp38-macosx_10_15_x86_64.whl 8 Stored in directory: /private/var/folders/jc/8_hqsz0x1tdbp05 ... 9 Successfully built uwsgi 10 Installing collected packages: uwsgi 11 Successfully installed uwsgi-2.0.18
要完全安裝uWSGI
, pip
需要經過幾個不同的步驟:
在第3行,它下載一個名為uwsgi-2.0.18.tar.gz
的TAR
文件(tarball),該文件是用gzip
壓縮的。
在第6行,它接受tarball
并通過調用setup.py
構建一個.whl
文件。
在第7行,它將輪子標記為uWSGI-2.0
.18-cp38-cp38-macosx_10_15_x86_64.whl
。
在第10行,它在構建了輪子之后安裝實際的包。
pip
檢索的tar.gz tarball
是一個源分發包,或sdist
,而不是一個輪子。在某些方面,sdist
是輪子的反義詞。
源代碼發行版包含源代碼。這不僅包括Python
代碼,還包括與包綁定的任何擴展模塊的源代碼(通常用C
或c++
編寫)。對于源發行版,擴展模塊是在用戶端而不是開發人員端編譯的。
源分發版還包含一個元數據包,位于名為.egg-info
的目錄中。該元數據有助于構建和安裝包,但用戶實際上并不需要使用它做任何事情。
從開發人員的角度來看,當您運行以下命令時,會創建一個源分發包:
$ python setup.py sdist
現在嘗試安裝一個不同的包:chardet
:
$ python -m pip install 'chardet==3.*' 2 Collecting chardet 3 Downloading chardet-3.0.4-py2.py3-none-any.whl (133 kB) 4 |████████████████████████████████| 133 kB 1.5 MB/s 5 Installing collected packages: chardet 6 Successfully installed chardet-3.0.4
您可以看到一個與uWSGI
安裝明顯不同的輸出。
安裝chardet
時直接從PyPI
下載一個.whl
文件。車輪名稱為chardet-3.0.4-py2.py3-none-any
。whl
遵循特定的命名約定,稍后您將看到。從用戶的角度來看,更重要的是,當pip
在PyPI
上找到一個兼容的滾輪時,并不存在構建階段。
從開發人員的角度來看,輪子是運行以下命令的結果:
$ python setup.py bdist_wheel
為什么uWSGI
給你一個源分布,而chardet
提供一個輪子?您可以通過查看PyPI
上每個項目的頁面并導航到下載文件區域來了解原因。本節將向您展示pip
在PyPI
索引服務器上實際看到的內容:
由于項目的復雜性,uWSGI
只提供了一個源分發版(uWSGI -2.0.18.tar.gz)。
chardet
同時提供了一個輪盤和一個源代碼發行版,但是如果與您的系統兼容,pip
會更喜歡輪盤。稍后您將看到如何確定兼容性。
另一個用于輪子安裝的兼容性檢查示例是psycopg2
,它為Windows
提供了大量的車輪,但沒有為Linux
或macOS
客戶端提供任何輪子。這意味著,根據您的具體設置,pip
安裝psycopg2
可以獲取一個滾輪或源分發版。
為了避免這些類型的兼容性問題,一些包提供了多個輪子,每個輪子都針對特定的Python
實現和底層操作系統。
到目前為止,您已經看到了輪子和sdist
之間的一些明顯區別,但更重要的是這些區別對安裝過程的影響。
在上面,您看到了獲取預構建輪子的安裝和下載sdist
的安裝的比較。輪子使得Python包
的端到端安裝速度更快,原因有兩個:
在其他條件相同的情況下,輪子通常比源分發包更小,這意味著它們可以在網絡中更快地移動。
直接從wheels
安裝避免了從源分發版構建包的中間步驟。
幾乎可以保證,安裝chardet
只需uWSGI
所需時間的一小部分。然而,這是一種不公平的比較,因為chardet
是一個明顯更小和更簡單的包。使用不同的命令,您可以創建一個更直接的比較,它將演示輪子造成的差異有多大。
你可以通過-no-binary
選項讓pip
忽略它對車輪的傾斜:
$ time python -m pip install \ --no-cache-dir \ --force-reinstall \ --no-binary=:all: \ cryptography
這個命令計算加密包的安裝時間,告訴pip
使用源分發包,即使有合適的輪可用。包括:all:
使規則適用于密碼學及其所有依賴關系。
在我的機器上,從開始到結束大約需要32秒。不僅安裝要花費很長時間,而且構建加密還需要提供OpenSSL
開發頭,并可用于Python
。
現在可以重新安裝密碼學,但是這次要確保pip
使用來自PyPI
的wheels
。因為pip
更喜歡輪子,所以這類似于完全不帶參數調用pip install
。但在這種情況下,你可以讓意圖顯式通過要求車輪-純二進制:
此選項僅花費4秒多一點的時間,即僅為密碼學及其依賴項使用源分發版時所用時間的八分之一。
感謝各位的閱讀,以上就是“Python Wheels有什么作用”的內容了,經過本文的學習后,相信大家對Python Wheels有什么作用這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。