2016-08-19 23 views
3

鑑於requirements.txt和virtualenv中的環境,什麼是檢查從腳本需求是否得到滿足,並有可能在不匹配的情況下提供詳細信息的最佳方式?如何比較需求文件和實際安裝的Python模塊?

皮普改變它與主要版本的內部API,所以我看到建議不要使用它的方法parse_requirements

有一種方式pkg_resources.require(dependencies),但然後如何解析需求文件與所有它的幻想,如github鏈接等?

這應該是很簡單,但找不到任何指針。

更新:需要編程解決方案。

+0

如果這些要求可以使用畫中畫安裝,你可以嘗試安裝所有這些,如果用戶已經安裝它們,他將得到一個「需求已經滿足了」的消息,並會繼續與下一個要求安裝。你也可以在你的代碼中捕獲try-except語句中缺失的依賴項,如果缺少則詢問用戶是否要安裝它。 – coder

回答

3

您可以pip freeze保存您的virtualenv目前的安裝包文件,說current.txt

pip freeze > current.txt 

然後,你可以比較這使用帶有difflib到requirements.txt像this的腳本:

import difflib 

req = open('requirements.txt') 
current = open('current.txt') 

diff = difflib.ndiff(req.readlines(), current.readlines()) 
delta = ''.join([x for x in diff if x.startswith('-')]) 

print(delta) 

這應該只顯示'requirements.txt'中不在'current.txt'中的包。

+1

這是非常嘈雜的方式:說明符未被正確比較並作爲更改報告(例如,報告了> = 8.2和== 8.2,因此它沒有違反)。另外,當沒有問題時,檢查應該不需要人工(我在問題中粗體顯示並添加更新以使其更清楚)。 –

+3

此外,提示可以滿足答案的人:使用'pip freeze -r requirements.txt> current.txt'來保存命令。它還報告一些案例不匹配。 –