Skip to content

Instantly share code, notes, and snippets.

@uranusjr
Last active April 13, 2020 10:41
Show Gist options
  • Save uranusjr/61f29ef16997148c3d9c2eda0bc1b2aa to your computer and use it in GitHub Desktop.
Save uranusjr/61f29ef16997148c3d9c2eda0bc1b2aa to your computer and use it in GitHub Desktop.
pip 即將更新依賴解析器(PSF 公告)

pip 即將更新依賴解析器(dependency resolver)

Partially translated from: https://pyfound.blogspot.com/2020/03/new-pip-resolver-to-roll-out-this-year.html

去年的 PSF 發文中提到,pip 的開發團隊正在為 pip 實作一個新的解析器(resolver)。我們計畫在今年把它釋出。

會有什麼改變

解析器的最重要改變會包括:

  • 讓安裝結果更一致:這個版本將不再允許安裝有內部衝突的套件組合。在目前的版本裡,如果使用者在指令中指定的套件版本與另一套件的依賴衝突,pip 仍然會允許安裝。

    舉例而言,pip install "six<1.12" "virtualenv==20.0.2" 現在會「成功」安裝 six==1.11。但這是錯誤的行為,因為 virtualenv==20.0.2 其實指定了 six>=1.12.0,<2宣告在這裡)。新的解析器會直接拒絕這個套件組合,而不會安裝任何東西。

  • 更加嚴格:如果你要求 pip 安裝的套件中,依賴的套件版本有衝突,將會直接被拒絕。目前的版本在這個狀況下會安裝無法使用的組合。

這將會對 pip 的重要部分造成大規模變動,因此初步釋出的版本中十分可能會有 bug。我們希望能夠在所有人於生產環境中使用新版本之前,就確保能抓到這些問題。

(技術細節參見 GitHub 專案板。)

你可以如何協助

  1. 現在就可以參與我們的使用者經驗研究。任何人都可以填寫問卷,或者與研究員進行視訊訪談。麻煩大家踴躍登錄,並盡可能把資訊散布給更多的人知道。

  2. 在你的 Python 環境裡執行 pip check(不需要新版解析器,現有的正式版即可)。這個指令會報告環境內目前有沒有衝突的套件。如果你的環境沒有衝突,新版解析器造成問題的機會就會大大降低。如果環境內有你無法解決的套件衝突,歡迎在我們的 issue tracker 或討論區發問!這些實務經驗也對解析器的開發很有幫助。

  3. 預先規劃時間(預計五月前後)測試 pip 新版本。(詳見事件時程)

    • 如果你用 pip 安裝軟體,請試著用新版本安裝。
    • 如果你的 build pipeline 用 pip 安裝專案依賴的套件,試著在建置系統使用新版本。
    • 為專案增加使用新版本的 CI 建置,並報告任何問題。
    • 若過去的 pip 版本曾經遇過任何依賴解析問題,看看新版解析器有沒有成功修正該問題。我們非常期待了解新解析器的技術限制,以讓更多人能更順利的升級。

    若遇到任何問題,歡迎填寫回報問卷

  4. 讓更多人知道!!

  5. 如果你開發的工具呼叫 pip,或用它提供了任何功能,請務必在五月測試我們釋出的 beta 版本,確認新版解析器對你產生的影響。

事件時程

新版解析器預計於 2020 下半年正式釋出。我們會提早釋出 alpha 與 beta 版本,並讓大家在 GitHub 或以 email 回報。任何回饋都歡迎!

歡迎登陸 pypi-announce mailing list 獲得更多及時版本資訊與回報管道。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment