快取¶
6.0 版新增功能。
pip 提供預設開啟的快取,旨在減少花費在重複下載和建置的時間。
快取的內容¶
HTTP 回應¶
這個快取功能類似於網頁瀏覽器快取。
進行任何 HTTP 要求時,pip 會先檢查其本機快取,以判斷是否針對該要求儲存有適當的回應且尚未過期。如果有的話,它會回傳該回應,且不會重新下載內容。
如果它有儲存回應,但已過期,那麼它會嘗試進行條件式要求來更新快取,這會回傳一個空回應,指示 pip 僅使用快取項目(並更新過期計時器),或它會回傳一個全新的回應,供 pip 儲存在快取中。
雖然這個快取會嘗試將網路活動降到最低,但它並非完全阻止網路存取。如果您想要一個不用存取 PyPI 的本機安裝解決方案,請參閱從本機套件進行安裝。
23.3 版異動: 現在使用新的快取格式,儲存在稱為 http-v2
的目錄中(有關此目錄位置的資訊,請參閱下方)。之前這個快取儲存在主快取目錄中稱為 http
的目錄。如果您已完全切換到 pip
的較新版本,您可能想要刪除舊目錄。
本機建置的輪子¶
pip 會盡可能嘗試從其本機輪子快取中使用輪子。
這表示如果有一個針對特定套件名稱的相同版本快取輪子,pip 會使用該輪子,而不是重新建置專案。
如果未找到任何針對來源散佈的輪子,pip 會嘗試使用該套件的建置系統建置輪子。如果建置成功,這個輪子會加入快取,並用於後續針對相同套件版本所進行的安裝。
以直接路徑提供給 pip 的來源散佈所建置的輪子(例如 pip install .
)不會在各次執行之間進行快取,不過它們可能會在同一次 pip
執行中重複使用。
版本 20.0 中已變更: pip 現在在從不可變的 Git 參照(例如提交雜湊)進行建置時快取 wheel。
快取儲存在何處¶
注意
pip 快取內容的確切檔案系統結構應視為實作細節,且可能會在兩個 pip 版本之間有所變更。
pip cache dir
¶
已在版本 20.1 中新增。
你可以使用 pip cache dir
來取得 pip 目前設定為使用的快取目錄。
預設路徑¶
~/.cache/pip
pip 也會尊重 XDG_CACHE_HOME
。
~/Library/Caches/pip
%LocalAppData%\pip\Cache
避免快取¶
pip 會嘗試盡可能使用其快取,而且其設計方式預設可執行正確的動作。
在某些情況下,pip 的快取行為可能不適當。例如,如果你有一個具有可選擇性 C 延伸模組的套件,而且該套件在無法建置 C 延伸模組時會產生純 Python wheel,則在後來從可建置這些可選擇性 C 延伸模組的環境中呼叫它時,pip 會使用快取的 wheel。這是因為 pip 會看到一個符合所建置套件的快取 wheel,而且 pip 預設從套件索引建置套件的結果會是確定的。
要處理這些情況,建議的做法是從原始碼發行版直接安裝,而不是讓 pip 在嘗試安裝時自動偵測套件。從原始碼發行版直接安裝將會讓 pip 建置 wheel,而不論是否有符合的快取 wheel。這通常表示會執行類似下列動作
$ python -m pip download sampleproject==1.0.0 --no-binary :all:
$ python -m pip install sampleproject-1.0.0.tar.gz
$ python -m pip download sampleproject==1.0.0 --no-binary :all:
$ python -m pip install sampleproject-1.0.0.tar.gz
C:> py -m pip download sampleproject==1.0.0 --no-binary :all:
C:> py -m pip install sampleproject-1.0.0.tar.gz
同時建議使用 pip cache 指令移除不適當的快取 wheel。
快取管理¶
pip cache 指令可以用於管理 pip 快取。
一般概述¶
pip cache info
會提供 pip 快取內容的概述,例如其總大小和各個部分的位置。
移除單一套件¶
pip cache remove setuptools
會從 pip 快取中移除與 setuptools 相關的所有 wheel 檔案。目前不會移除 HTTP 快取檔案。
移除快取¶
pip cache purge
會清除 pip 的 wheel 和 HTTP 快取中所有的檔案。
列出快取中的檔案¶
pip cache list
會列出 pip 快取中所有的 wheel 檔案。
pip cache list setuptools
會列出 pip 快取中所有與 setuptools 相關的 wheel 檔案。
停用快取¶
傳遞 --no-cache-dir
選項可以停用 pip 的快取行為。
但是,建議不要停用 pip 快取,除非你已在較高的層級啟用快取(例如:容器建置中的分層快取)。停用快取會大幅降低 pip 執行速度(原因是重複執行作業和建立套件),並會導致網路使用量大幅增加。