相依性地狱

✍ dations ◷ 2024-12-22 23:41:47 #反模式,软件包管理系统,版本控制系统,计算机错误

相依性地狱(英语:dependency hell),又称依赖地狱,是指在操作系统中由于软件之间的依赖性不能被满足而引发的问题。

一个软件包依赖于其它必要的软件包(且版本要符合要求),使得软件包系统形成了复杂的依赖关系网络,并可能引发一系列问题。一些软件包可能因为依赖性无法满足,需要安装大量软件包;另一方面,一个软件包的卸载可能引发数量众多的软件包无法工作。

目前,GNU/Linux通过高级软件包管理机制,一定程度上解决了相依性地狱问题。较著名的有Debian阵营的APT和Redhat阵营的Yum,及 Yum 的后继包管理工具 DNF。

相较“另起炉灶”的做法,现代软件往往会利用一些已有的组件(如库、程序、多媒体文件)进行开发。这些组件可能是某个软件,也可能是专门为其他软件使用而设计(库)。程序开发者根据特定版本的组件来设计自己的软件。这种方式减少了开发的工作量,使得程序比较轻便。但是该软件要正确运行,必须安装了指定版本的某些组件。

做一个比喻:你在建造一所房子,而并不生产门窗。由于门洞和窗口的尺寸要和门窗配合,因此你不得不寻找了一家门窗厂商,以他们生产的门窗作为标准,来建造合适的房子。你建造的房屋必须依赖于这家门窗厂商所生产的特定型号的门。

这便是相依性的产生过程。

若只有简单的相依性,则比较容易解决。如A软件依赖e、z软件包,而e、z软件包没有依赖,只需要安装e、z软件包,再安装A软件即可。就如建造商与门窗商的依赖关系,简单明了。

而当依赖性过多,且具有多级结构,形成错综复杂的网络,依赖性的解析就会变得异常困难,甚至出现无法解析的致命错误。

一个软件包可能依赖于众多的库,因此安装一个软件包的同时要安装几个甚至几十个库包。

指从所需软件包到最底层软件包之间的层级数过多。这会导致依赖性解析过于复杂,并且容易产生依赖冲突和环形依赖。

即两个软件包无法共存的情况。除两个软件包包含内容直接冲突外,也可能因为其依赖的低层软件包互相冲突。因此,两个看似毫无关联的软件包也可能因为依赖性冲突而无法安装。

即依赖性关系形成一个闭合环路,最终导致:在安装A软件包之前,必须要安装A、B、C、D软件包,然而这是不可能的。

相关

  • 法律美国法律(law of the United States)源自美国独立战争时期的英国普通法体系,只是在最高权力条款规定下,美国宪法、国会制定的其他法律和美国参与的国际条约是国家的最高法律。这
  • 大东部大区大东部(法语:Grand Est)是法国的大区之一,由阿尔萨斯、香槟-阿登、洛林3个大区合并而成,于2016年1月1日正式成立、同年9月28日改用现名。2014年,法国政府开始谋划行政区划改革方案
  • 本吉拉省本格拉省( Benguela)位于安哥拉中西,与南广萨省、万博省、威拉省、纳米贝省等省份相邻。
  • 纳米技术 (期刊)纳米技术(英语:Nanotechnology),是一份由英国物理学会出版社(英语:IOP Publishing)出版的学术期刊,实行同行评审,每周出刊。该刊涵盖纳米技术的所有领域。根据2015年汤森路透的期刊引
  • 驼峰驼峰或骆驼峰通常指骆驼背上突出的部位,是脂肪组织,也可以指:
  • 爱德华·詹纳爱德华·詹纳(英文:Edward Jenner,1749年5月17日-1823年1月26日),FRS,亦译作爱德华·金纳或琴纳,是一名英国医生,生于英国告罗士打郡伯克利牧区一个牧师家庭,以研究及推广牛痘疫苗,防止
  • P-43枪骑兵P-43战斗机(Republic P-43 Lancer)是种单引擎,全铝合金,低主翼的战斗机,由共和飞机公司制造。该机设计自P-35战斗机改良而来,在1940年被美国陆军航空队采用,但只生产稀少数量后停产
  • 卖身契契约劳工,又称契约奴工、契约佣工,通常指年轻、非熟练工人在一段固定的时间内与雇主签订用工协议参与工作的劳动者。契约劳工的签订时间一般为三年以上七年以下,雇主提供交通、
  • 弗里德里希·荷尔德林约翰·克里斯蒂安·弗里德里希·荷尔德林(Johann Christian Friedrich Hölderlin ,1770年3月20日-1843年3月7日),是一名德国浪漫派诗人。他将古典希腊诗文移植到德语中。其作品
  • 新罗谢尔 (纽约州)新罗谢尔 (New Rochelle, New York)是美国纽约州威斯特彻斯特县的一座城市,位于长岛海峡的北岸。2000年人口72,182人,是该州第七大城市。胡格纳湖 (Huguenot Lake), 位于纽约州