我理解这些基本概念,但是有没有使用特殊算法,或者有些博客,论文甚至是关于这个主题的书籍,可以让他们构建自己的系统?实际上实施这样的系统似乎没有什么信息。包管理器(aptitude,yum,portage)如何构建它们的依赖树?
回答
依赖关系树本身加载是微不足道的,所有你需要的是从键(如名称)到对象的一些映射。
你还没有指定任何语言,所以我选择了Python。期望的输入是以“[name]:[空格分隔的依赖关系]”形式的行文件。
def load_depends(file):
depends = {}
for line in file:
line = line.strip()
if not line or line.startswith("#"): # allow blanks and comments
continue
name, _, deps = line.partition(":")
deps = deps.strip()
assert deps, "invalid input" # most basic input error-checking
depends[name] = set(deps.split())
return depends
此代码假定未列出的项目具有零点的依赖,你可以遍历树如果需要添加空项。至少你应该检查递归依赖关系。
例子:
>>> input = """\
... a: b c
... b: c
... c: d
... e: a
... """.split("\n")
>>> from pprint import pprint
>>> pprint(load_depends(input))
{'a': set(['b', 'c']),
'b': set(['c']),
'c': set(['d']),
'e': set(['a'])}
[注:我走了一条捷径,因为我真的不要求行的文件,但行的迭代(该文件符合),所以我通过列表]
你可以在这个基本结构的基础上构建各种函数,然后将它和那些概念封装起来(比如依赖vs建议和建议,甚至是冲突vs替换等)特定于您的系统的对象。
许多其他概念还涉及依赖关系树,如SNMP MIB解析,C/C++源代码编译。所以你可以参考任何其他材料,谈论这个:)
你有什么具体的想法?我的问题之一是,搜索只会导致人们谈论他们自己的软件包管理器问题,而不是编程。 – tedivm 2009-11-30 08:32:37
当我编程#SNMP Suite时,我编写了自己的SNMP MIB解析代码。在加载新的MIB模块之前,利用一个简单的递归算法来检查是否所有的依赖项都已经加载到了ObjectTree实例中。 一般来说,写起来并不难,而且您总是可以从您喜欢的语言的小样本项目开始。 – 2009-11-30 09:13:42
- 1. 如何构建管理依赖项的自包含OSGi包?
- 2. 构建依赖树
- 3. Gradle中的构建依赖关系树
- 4. 如何管理OSGi构建依赖关系?
- 5. 语言/平台/构建无关依赖关系管理器
- 6. Maven构建与依赖树不同
- 7. Maven:依赖管理
- 8. Matlab依赖管理
- 9. Java依赖管理
- 10. 管理软件包依赖关系
- 11. Javascript依赖性管理和包装
- 12. 管理巧克力包依赖项
- 13. Git子模块vs Git子树vs依赖管理器CocoaPods
- 14. 如何创建与构建依赖关系的deb包
- 15. Javascript编译器/依赖管理器?
- 16. Maven的依赖管理
- 17. PowerShell的依赖管理
- 18. npm:依赖关系如何管理?
- 19. 如何管理.net依赖关系
- 20. 构建一个Scala包依赖图
- 21. maven - 如何构建依赖的uberjars
- 22. 通过多个服务器管理依赖的ant构建的最佳方法?
- 23. 詹金斯(哈德森) - 并行之间管理依赖构建
- 24. 依赖容器和与IBM DevOps Services构建管道的链接
- 25. 如何在组合中管理包相互依赖关系?
- 26. 如何实现依赖/包管理系统?
- 27. 在PyPI上开发python包时如何管理依赖关系?
- 28. PHP,作曲家,PHP依赖管理器
- 29. C++依赖关系管理器
- 30. Azure资源管理器:循环依赖
当您试图查看这些软件包管理器的源代码时发生了什么?能够看到如何编写开源工具是他们的一大好处! – 2010-02-22 11:41:58
我已经检查过他们,但说实话,有些非常混乱,很难分析。令人震惊的是,我发现PEAR是一个很好的资源,并且已经对它进行了相当多的研究。 – tedivm 2010-02-23 18:47:39
我建议你用你之前评论的内容更新你的问题。与研究有关的信息属于这个问题。 – tzot 2011-11-13 07:53:04