2016-12-23 23 views
2

我最近以任何理智的方式瞭解pip does not resolve transitive dependencies。這意味着在安裝一個軟件包之後,它的一些依賴關係的依賴關係可能實際上不會被滿足。在安裝時檢測Python傳遞依賴性問題?

有沒有辦法以編程方式檢查所有安裝的軟件包的依賴關係在安裝後是否真正滿足?

具體來說,我希望能夠創建一個virtualenv,安裝一些軟件包,然後驗證所有安裝的軟件包實際上是否具有所需的依賴關係。


編輯:這裏是爲了更好地說明這個問題的例子。假設包A取決於包BC,兩者都取決於包D,可能具有不同的版本範圍。當安裝A時,pip將任意選擇D指定的版本範圍之一來滿足。例如,BD的依賴可能會得到滿足,但CD所需版本可能不滿足。我想檢測是否存在這樣的問題。

+0

是的,使用需求文件並固定您的版本號。 –

+0

@BurhanKhalid請看上面的問題。我正在尋求一種「在安裝時檢測Python傳遞依賴性問題」的方法。我不是要求一種方法來避免傳遞依賴問題,尤其是不能通過手動解決依賴問題。 – augurar

回答

0

This answer顯示如何獲取所有本地安裝的軟件包。 This one展示了一種驗證給定包的安裝方式,它也遞歸地檢查包的依賴關係。結合這些:

import pip 
import pkg_resources 

pkg_resources.require(str(dep.as_requirement()) 
         for dep in pip.get_installed_distributions()) 

這將引發ResolutionError如果任何安裝的軟件包有不滿意的要求。


旁白:這似乎是有什麼新的pip check命令意在做,但它並沒有趕上那上面的腳本捕捉一些依賴問題,如extras-related issues