替 pip 功能排序

問題

pip 開發團隊人數不多,能投注在透過 問題追蹤器 回報的問題的時間與精力有限。而且團隊待回應的問題積壓過多(截至 2020 年 11 月為 782 個)。為了讓團隊能根據最具影響力的工作來優先進行,我們需要進一步了解使用者對 pip 的期待。

跳至建議

研究

為了協助回答這個問題,我們開發了「購買功能」調查,場景如下

透過參與我們的「購買功能」遊戲,幫助我們了解對您而言什麼最重要

您有 200 美元的預算用於重新設計 pip。

用您的 200 美元預算「購買」您最希望保留的功能。

不一定要花完所有預算,但也不要超支!

我們請使用者將頭 100 美元用在與 pip install 相關的功能上,將剩下的 100 美元用在其他 pip 功能上。我們也另外給予使用者 10 美元建議新功能

survey question where users are asked to buy features for pip install

survey question where users are asked to buy features other than pip install

survey question where users are asked to spend an additional ten dollars

結果

我們收到 1076 份回覆,其中 1070 份有效。人氣最高的幾個功能包含了 pip 的核心能力

  • 從已安裝的相依性清單重新建立環境;

  • 從虛擬控制系統、檔案或本機目錄安裝、解除安裝和升級套件;

  • 警告中斷或有衝突的相依性。

pip 安裝

與 pip 安裝相關的熱門十大功能為

pip install results

  1. 安裝和解除安裝套件

  2. 將套件升級至最新版本

  3. 警告中斷的相依性

  4. 從版本控制系統安裝套件(例如 Git、Mercurial 等)

  5. 根據檔案中的指定事項安裝套件

  6. 從本機目錄安裝套件

  7. 比對下載的套件和 hash

  8. 從替代套件指標或指標安裝套件(預設僅為 PyPI)

  9. 從輪件安裝套件(無需編譯程式碼)

  10. 控制您想要讓已安裝套件留在電腦中的位置

其他 pip 功能

與其他 pip 功能相關的熱門十大功能為

other pip functionality results

  1. 產生可供重新建立環境的已安裝套件清單

  2. 檢查已安裝套件是否沒有相依性衝突

  3. 無需任何使用者輸入即可執行 pip(例如在 CI 當中)

  4. 顯示所有已安裝套件的資訊

  5. 顯示關於單一已安裝套件的資訊

  6. 在 pypi.org 中搜尋套件

  7. 顯示關於 pip 的資訊(版本資訊、說明資訊等)

  8. 下載套件、建構輪子並將其保留在目錄中,以供離線使用

  9. 管理 pip 的預設組態(例如使用組態檔)

  10. 自訂 pip 的輸出(例如減少或增加詳細程度、抑制色彩、將輸出傳送至記錄檔)

結果會因使用者的 Python 經驗量而異。

查看使用者根據經驗等級選擇功能的可能性

根據雜湊驗證下載的套件

screenshot of verify downloaded packages against hashes

警告中斷的依賴關係

Screenshot of Warn about broken dependencies

將套件升級至最新版本

Screenshot of Upgrade packages to the latest version

從其他套件索引或索引安裝套件

Screenshot of Install packages from an alternative package index, or indexes

根據檔案中指定的內容安裝套件

Screenshot of Install packages as specified in a file

安裝和解除安裝套件

Screenshot of Install and uninstall packages

從版本控制系統安裝套件

Screenshot of Install packages from a version control system

從輪子安裝套件

Screenshot of Install a package from wheels

從本機目錄安裝套件

Screenshot of Install apackage from a local directory

控制你想要讓已安裝的套件放在電腦中的位置

Screenshot of Control where you want your installed package to live on your computer

建議

環境重建

環境重建已包含在 pip 中,作為 requirements.txt 功能的一部分;但是,由於其受歡迎程度和需求,我們建議pip 應該改善對此功能的支援。

  • 改善環境重建使用者輸出和說明指南,直接在 pip CLI 中;

  • 改善 pip 說明文件和使用者指南,以將環境重建標示為 pip 的核心功能;

  • 改善環境重建流程本身,將虛擬環境視為 pip 中的「內建」核心能力。

從已安裝的依賴關係清單中重建環境是最有價值的功能需求整體而言以及每個使用者群體,除了那些經驗少於 6 個月和那些經驗 16-19 年的人(對於他們來說這是第二個最有價值的功能)。

當被要求輸入自由文字的功能需求時,使用者會將「內建」、「虛擬」、「自動」和「隔離」等字詞與「環境」一詞並列,這表示使用者期望 pip 以高度智慧和可用性重建環境。

選取直接引號

讓 pip 在您不在 virtualenv 環境中時向您發出警告

透過命令列參數自動建立 virtual env 環境

不用 virtual env 環境了。就像其他人一樣只使用 ./python_modules/

我非常希望看到 pip 像 minicona 一樣管理 python 版本和 virtual env 環境

我會花費所有 200 美元在這上面:將 pipenv 或 venv 整合到 pip 中,如此一來安裝應用程式就不會在系統套件儲存庫中安裝其相依性項。而且允許釘選應用程式套件的相依性版本(就像 pip-compile 的作法)

相依性項管理

我們建議 pip 團隊改善與相依性項相關的警告和錯誤訊息(例如衝突),並提供解決問題的實用建議。這可以在不同的時間軸上進行,包括

  • 在錯誤訊息旁邊直接提供使用者關於如何解決此問題的提示;

  • 在發生 pip install 衝突錯誤時,在文件中醒目顯示 virtual env 環境建立相關資訊,而且如果可能的話,作為 pip 的內建功能;

  • 升級相依性項解析器 (正在進行中)。

很明顯的,相依性管理(包括發出衝突套件和升級的警告)對 pip 使用者而言很重要。透過協助使用者透過 virtual env 環境更好地管理相依性項,pip 可以減少使用者遭遇的整體警告和衝突訊息數量。