【问题标题】:How to compare requirement file and actually installed Python modules?如何比较需求文件和实际安装的 Python 模块?
【发布时间】:2016-12-27 01:28:03
【问题描述】:

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

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

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

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

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

【问题讨论】:

  • 如果可以使用 pip 安装这些要求,您可以尝试全部安装,如果用户已经安装了它们,他将收到“要求已满足”消息,并将继续下一个要求安装.您还可以在代码中在 try-except 语句中捕获缺少的依赖项,如果缺少,请询问用户是否要安装它。

标签: python python-2.7 pip requirements.txt


【解决方案1】:

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

pip freeze > current.txt

然后您可以使用 this 之类的脚本将其与带有 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)

这应该只显示“requirements.txt”中不在“current.txt”中的包。

【讨论】:

  • 这是一种非常嘈杂的方式:说明符未正确比较并报告为更改(例如,>=8.2 和 ==8.2 已报告,因此没有违规)。此外,当没有问题时,检查不应该需要人工(我在问题中将其加粗并添加了更新以使其更加清晰)。
  • 另外,提示那些对答案感到满意的人:使用pip freeze -r requirements.txt > current.txt 保留订单。它还会报告一些大小写不匹配的情况。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-02-06
  • 2020-11-01
  • 1970-01-01
  • 2016-01-11
  • 1970-01-01
  • 1970-01-01
  • 2018-11-17
相关资源
最近更新 更多