Watch at Ease看見世界,讀懂生活。

科技 · 實用指南

pip 說 wheel 有多個 .dist-info?先檢查安裝包再清理環境

此驗證錯誤針對開啟中的 wheel。先定位檔案、唯讀列出 ZIP 內容並比較獨立下載副本,避免誤刪已安裝中繼資料或清空所有快取。

區分單一根、多根與已安裝環境警告的原創圖。
原創編輯插畫:先檢查 wheel ZIP 頂層中繼資料,再改環境。 Watch at Ease

pip 顯示 invalid wheel、multiple .dist-info directories 時,先檢查指定 wheel,不要先刪 site-packages 目錄。目前 pip 從 wheel ZIP 取得頂層名稱,發現多個中繼資料根目錄便拒絕。已安裝環境的 invalid distribution 警告屬於另一診斷路徑。

保留失敗檔案與身分

保存完整錯誤、.whl 檔名、套件版本、Python 執行檔與 python -m pip --version 輸出。記錄來源是索引、直連、本機 wheelhouse 或原始碼建置;解析失敗的可能是間接相依套件。

在環境外保留副本,用 python -m pip hash 加引號路徑記錄 SHA-256。分享前去除憑據。相同檔名不代表鏡像、快取與上游位元組一致。

只列 ZIP,不解壓或執行

執行 python -m zipfile -l 加引號 wheel 路徑。檢查成員名稱第一段,記錄不同且以 .dist-info 結尾的頂層根目錄。同一目錄內兩個檔案正常,兩個不同根目錄才是此錯誤要調查的條件;列表與 hash 一起保留。

可選 python -m zipfile -t 檢查 ZIP 完整性。CRC 與標頭通過不代表 pip 接受結構、發布者可信或全部 RECORD hash 已驗證。不能讀 ZIP 時先調查檔案,不要直接解壓到 site-packages 繞過驗證。

獨立下載副本比對

同一解譯器與核准來源,在空比較目錄執行 python -m pip download --no-deps --only-binary=:all: --no-cache-dir --dest wheel-check,後接準確且有引號的套件版本要求。此操作下載相容 wheel 而不安裝;沒有相容二進位會失敗,勿照抄無關歷史版本。

比較檔名、hash 與中繼資料根目錄。反覆收到相同壞包,清更多快取也無法修復上游。若副本不同,先核下載路線、鏡像、建置輸出與檔案選擇;hash 不同本身不能證明可信度。

修正版本,再驗證應用程式

反覆出現的已發布壞包應交維護者或儲存庫管理員,附版本、檔名、去敏來源、hash、目錄列表及 Python/pip 資訊。核相依要求後可選修正版或明確相容限制;從原始碼重建是獨立工具鏈工作。

不要從 ZIP 刪掉一個 .dist-info 就冒充原版,因中繼資料與 RECORD 相連;也不要因此刪已安裝資料。在可拋棄環境用真實 requirements 測替代包,執行 python -m pip check 及應用程式基本測試。解析成功不等於應用相容。

保留、比較、驗證 wheel 的原創流程。
原創編輯插畫:保留安裝包、比較獨立下載並測試替代版本。 Watch at Ease