可重複安裝¶
pip 可用於達成不同層級的可重複環境。此頁面會說明越來越嚴格的「可重複」定義。
固定套件版本¶
在需求檔案中固定相依套件的套件版本,可保護您免於新發行的版本中的錯誤或不相容性影響
SomePackage == 1.2.3
DependencyOfSomePackage == 4.5.6
注意事項
固定是指使用 ==
算子來要求套件為特定版本。
可以使用 pip freeze 產生包含固定套件版本的需求檔案。這樣不僅會固定頂層套件,也會固定所有傳遞相依套件。使用 --no-deps 執行安裝,可進一步確保不會安裝任何未明確列出的項目。
此策略容易實作,而且可以在各種作業系統和架構中使用。但是,它信賴您取得套件的位置(例如 PyPI)和憑證授權鏈。它也依賴這些位置不允許套件在版本未增加的情況下進行變更。(PyPI 會防範這種情況發生。)
雜湊檢查¶
除了固定版本號碼外,您還可以在下載的套件上加入雜湊,用於進行驗證
FooProject == 1.2 --hash=sha256:2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824
這可防範 PyPI 或 HTTPS 憑證鏈遭到入侵。它也可以防範套件在版本號碼未變更的情況下進行變更(在允許這種情況發生的索引中)。這個方法非常適合自動化伺服器部署。
雜湊檢查模式是一種省力的替代方案,可以取代建立包含核准套件的私人索引伺服器:它消除了上傳套件、維護 ACL,以及保留稽核追蹤記錄(VCS 會免費為需求檔案提供)的必要性。它也可以取代供應商套件庫,提供更輕鬆的升級和更少的 VCS 雜訊。當然,它不會提供私人索引或供應商套件庫的可用性優點。
pip-tools 是建立在 pip 之上的套件,它提供了一個管理和產生需求檔案的良好工作流程。
使用輪屋(又稱安裝套件)¶
pip 輪盤 可用於產生和封裝所有專案的相依項,且編譯全部執行後,便可轉換為單一目錄,進而轉換為單一封存檔案。此封存檔案則允許在索引伺服器不可用時進行安裝,並避免產生耗時的重新編譯。
範例
在現代 Unix 系統上建立套件
$ tempdir=$(mktemp -d /tmp/wheelhouse-XXXXX)
$ python -m pip wheel -r requirements.txt --wheel-dir=$tempdir
$ cwd=`pwd`
$ (cd "$tempdir"; tar -cjvf "$cwd/bundled.tar.bz2" *)
在現代 Unix 系統上從套件中安裝
$ tempdir=$(mktemp -d /tmp/wheelhouse-XXXXX)
$ (cd $tempdir; tar -xvf /path/to/bundled.tar.bz2)
$ python -m pip install --force-reinstall --no-index --no-deps $tempdir/*
請注意,此套件會包含編譯好的套件,通常與特定作業系統和架構有關,因此這些封存檔案不必然可以在機器間移植。
哈希檢查模式也可搭配此方法使用(因為這也使用需求檔案),以確保未來封存檔案是使用相同的套件建置。
警告
小心 setup_requires
setup.py
中的關鍵字參數。使用此參數的(罕見)套件會導致相依項由 setuptools 直接下載,並因此略過 pip 的保護機制。如果您需要使用此類套件,請參閱 控制 setup_requires。