2017-02-23 85 views
2

當我需要一個Python庫時,我使用pip從PyPi中獲取它,如果我創建了一個項目並想共享它,我只需要具有setup.py文件,這將使它易於安裝。因此,我想知道雞蛋或輪子包裝的用途是什麼。爲什麼我們需要蟒蛇包裝(例如雞蛋)?

+0

我知道它是什麼。我不明白它的需要,因爲編譯概念不適用於python,因爲它適用於例如C或java。 –

回答

2

Python Packaging User Guide不得不說關於這一主題的以下內容:

輪和蛋是旨在支持需​​要一個安裝工件,不需要建設或編譯的使用情況下,兩個包裝形式,這在測試和生產工作流程中可能是昂貴的。

這些格式可用於分發包含二進制擴展模塊的包。否則需要在安裝過程中進行編譯。

如果沒有編制涉及一個source distribution在原則上是足夠的,但是用戶指南還建議創建性能原因輪:

至少,你應該創建一個源代碼發佈:

python setup.py sdist

「源代碼發佈」是未構建的(即,它不是構建發行版),並且需要通過pip安裝時的構建步驟。 即使該分發版本是純Python(即不包含擴展名),它仍然涉及構建步驟以從setup.py構建安裝元數據。

[...]

您還應該爲您的項目創建一個輪子。輪子是一個可以安裝而不需要經過「構建」過程的構建包。對於最終用戶來說,安裝車輪比從源代碼分發系統安裝要快得多。

簡而言之,軟件包是一個方便的東西 - 主要是爲用戶。

Wheel包統一了分發和安裝包含純python,平臺相關代碼或編譯擴展的項目的過程。用戶不需要擔心程序包是用Python編寫的還是用C編寫的 - 它只是起作用。

+0

謝謝,但通常我使用的所有項目都只有配置文件和python腳本,因此不需要編譯。因此,我認爲包裝不是通常使用或需要的東西(至少在我的情況下) –

+0

謝謝!我的問題是回答:) –

1

雞蛋包是一個較舊的標準,你應該忽略它們。使用pip install .而不是./setup.py install來防止創建它們。 (附錄:它們也是變相的.zip,Python從中讀取包數據 - 不完全是性能最高的解決方案)

另一方面,車輪包是新標準。它們允許爲Windows,macOS和Linux創建可移植的二進制包。現在,你可以做pip install PyQt5(作爲例子),它只會工作,系統上不需要C++編譯器和Qt庫。一切都預先編譯幷包含在方向盤中。非二進制包也會受益,因爲不運行setup.py(所有元數據都在輪子中)更安全。 (附錄:那些也是.zip s,但是它們在安裝時解包)

+0

謝謝。但是,如果我的項目只包含python腳本和配置文件,wheel包不會帶來任何好處,對吧? –

+0

@ M.Buil http://pythonwheels.com/ - *避免安裝時執行任意代碼。 (避免setup.py)。創建.pyc文件作爲安裝的一部分,以確保它們與使用的python解釋器匹配。跨平臺和機器的更一致的安裝。* –