如何比较需求文件和实际安装的Python模块?

Rom*_*usi 4 python pip python-2.7 requirements.txt

在给定requirements.txt的virtualenv环境下,从脚本检查是否满足要求并在不匹配的情况下提供详细信息的最佳方法是什么?

Pip在主要版本中更改了它的内部API,所以我看到一些建议不要使用它的parse_requirements方法。

有一种方法pkg_resources.require(dependencies),但是然后如何解析需求文件,如github链接等呢?

这应该很简单,但是找不到任何指针。

更新:需要编程解决方案。

小智 5

您可以将virtualenv当前安装的软件包保存pip freeze到一个文件中,例如current.txt。

pip freeze > current.txt
Run Code Online (Sandbox Code Playgroud)

然后,您可以使用类似script的脚本将此文件与使用difflib的requirements.txt进行比较:

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)
Run Code Online (Sandbox Code Playgroud)

这应该仅显示“ requirements.txt”中的软件包,而不是“ current.txt”中的软件包。

  • 另外,对那些可能对答案感到满意的人提示:使用`pip Frozen -r requirements.txt> current.txt`保留顺序。它还报告某些案例不匹配。 (5认同)