【问题标题】:Is there such thing as a generic dependency resolution library for python?是否有诸如 python 的通用依赖解析库之类的东西?
【发布时间】:2015-02-26 21:42:08
【问题描述】:

我正在寻找可以让我定义某种“事实”和事实之间的“依赖关系”的东西,并定义将尝试解决这些依赖关系的函数。

有点像包管理器解决包之间的依赖关系的方式,而是一个抽象依赖关系解决过程的库。

正如我希望能够声明我希望事实 A 为真,而事实 A 还要求事实 B 为真,并给出一组输入,使其能够确定是否A 和 B 都为真,这个系统会尽一切努力使 A 和 B 都为真。

【问题讨论】:

  • 不知道任何满足这种特定情况的东西,但听起来您的问题域具有底层图形结构(事实是节点,依赖项是边)。可能值得一看 python-graph,它允许您构建图表,还提供了许多用于处理图表的算法。
  • 您在Software Recs 上提问可能会更好,并且可能有助于您搜索的关键字是拓扑排序。
  • @kalhartt SR 模组在这里。请确保添加指向我们question quality guidelines 的链接 - 我们需要的信息比这里包含的一般问题要多得多。谢谢!
  • @Undo 我以后会记住的,谢谢你的信息!

标签: python dependency-injection dependencies dependency-management


【解决方案1】:

我知道这个问题已经很久没有问过了,但我有完全相同的问题,我在 Google 上找不到任何有用的东西...

TL;DR: 基于this 的帖子,我开始研究多版本依赖解析算法,您可以找到here。我不能保证它是正确的,但似乎是完整的。这更像是一个实验,但它使用受控数据集成功运行,并使用随机数据产生结果。

现在,我从这个过程中学到的是,实现一个简单的依赖解析算法相当容易,该算法可以处理已知数据的大多数情况并在“平面”图上工作。但是,如果考虑到多个版本、基于范围的依赖(即version > 2.0 and !2.2)而不是绝对依赖、多个正确的解决方案、不完整或不正确的数据,这将变得更加复杂。

在复杂情况下,最明显的问题是循环依赖(参见herehere)。这些肯定存在于软件/包管理器上。我尝试使用基于回合的方法来解决它,这种方法在多次尝试后会导致解决方案、失败或(检测到的)循环。

最后,我试图概括问题并创建一个可重用的库。你会注意到我的主要逻辑(_resolve())比satisfy_criteria() 更直接,后者是依赖接受的问题/区域特定功能。此外,循环依赖“解决”完全基于包管理/版本控制,很可能不适用于任何其他案例/领域。

以上内容让我相信,尽管大多数解决方案都将涉及到图,但在某个阶段或另一个阶段,对于依赖关系解析问题并不存在高级通用解决方案。

我的下一步(有时间)将开始阅读 apt-getrpmaptitude 资源,看看其他人是如何解决这个问题的......

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-09-14
    • 1970-01-01
    • 2011-01-22
    • 2013-08-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多